Старый 28.03.2011, 18:20   #21
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Цитата:
Сообщение от mailbrush Посмотреть сообщение
Имел ввиду через PHP, без каких-либо доп. скриптов.
По производительности - чем больше записей за один раз, тем быстрее выполняется скрипт. НО если уж слишком много - "MySQL server has gone away". Вот и пытаюсь найти оптимальное значение.
С большими базами, как уже показал Raz0r, всегда лучше работать через консоль, не зацикливайтесь на PHP, уже смешно просто. Не для этого он был разработан. Если провести аналогию - не надо пытаться закрутить колесо на машине пассатижами, можно, но удовольствия будет мало.
Pashkela вне форума   Ответить с цитированием
Старый 30.05.2011, 17:30   #22
shaitanych
 
Аватар для shaitanych
 
Регистрация: 06.07.2010
Сообщений: 8
Репутация: 0
По умолчанию

нужно сделать голосовалку. имеется сообщения и его рейтинг(+ и -). как все организовать в бд что бы он помещал ip к голосуемым сообщения ?
__________________
Кто владеет информацией, тот владеет миром.(c)
shaitanych вне форума   Ответить с цитированием
Старый 30.05.2011, 17:48   #23
nobody
 
Аватар для nobody
 
Регистрация: 05.07.2010
Сообщений: 176
Репутация: 130
По умолчанию

не зависимо от таблицы poll (в ней хранится любая инфа о item'е голосования), создаёшь poll_to_rate
Код:
 primary unique key +auto_increment - id
 integer - id_poll #связь с poll
 timestamp without time zone - date
 smallint - rate
 ip - bigint (length: 14)
если всё как ты сказал (только + и -), то получать рейтинг по id item'а будешь проcтейшим джойном с sum(rate)
ip записывается, не как стринг, а ip2long
__________________
Sad panda
nobody вне форума   Ответить с цитированием
Старый 30.05.2011, 19:20   #24
_xhugo
 
Регистрация: 11.11.2010
Сообщений: 26
Репутация: 0
По умолчанию

Цитата:
нужно сделать голосовалку. имеется сообщения и его рейтинг(+ и -). как все организовать в бд что бы он помещал ip к голосуемым сообщения ?
бд: id,msg,ip,vote
при голосование проверяешь имеется ли ip в бд у этой записи, если нету то прибавлять\отнимай у vote, и добавляй ip
с запросами надеюсь сам разберешься.
_xhugo вне форума   Ответить с цитированием
Старый 07.06.2011, 22:42   #25
shaitanych
 
Аватар для shaitanych
 
Регистрация: 06.07.2010
Сообщений: 8
Репутация: 0
По умолчанию

nobody, а почемау ip надо хранить как ip2long?
и еще т.е. для каждого сообщения / ip будет отдельная строка в таблице ?
__________________
Кто владеет информацией, тот владеет миром.(c)

Последний раз редактировалось shaitanych; 07.06.2011 в 22:53.. Причина: upd
shaitanych вне форума   Ответить с цитированием
Старый 08.06.2011, 00:22   #26
M_script
 
Регистрация: 06.07.2010
Сообщений: 113
Репутация: 33
По умолчанию

Цитата:
Сообщение от shaitanych Посмотреть сообщение
nobody, а почемау ip надо хранить как ip2long?
long - 4 байта, строка IP - 15 байт
M_script вне форума   Ответить с цитированием
Старый 19.06.2011, 18:27   #27
nobody
 
Аватар для nobody
 
Регистрация: 05.07.2010
Сообщений: 176
Репутация: 130
По умолчанию

Туплю с группировками
Код:
SELECT
    `p`.`thread_id`,
    `p`.`post_id`,
    DATE_FORMAT(`p`.`date_posted`, '%d.%m.%Y %H:%i')as`date_posted`,
    (
        SELECT count(*) FROM `posts` WHERE `thread_id`=`p`.`thread_id`
    )as`count`,
    `u`.`user_id`,
    `u`.`username`
FROM
    `posts`as`p`
INNER JOIN
    `users`as`u`
USING(`user_id`)

ORDER BY
    `date_posted`
DESC
Код:
+-----------+---------+------------------+-------+---------+----------+
| thread_id | post_id | date_posted      | count | user_id | username |
+-----------+---------+------------------+-------+---------+----------+
|         2 |       7 | 19.06.2011 17:31 |     3 |       1 | Вася |
|         3 |       6 | 19.06.2011 16:50 |     2 |       2 | Петя |
|         1 |       5 | 19.06.2011 16:07 |     2 |       1 | Вася |
|         2 |       4 | 19.06.2011 16:05 |     3 |       2 | Петя |
|         2 |       3 | 19.06.2011 15:55 |     3 |       2 | Петя |
|         3 |       2 | 19.06.2011 15:55 |     2 |       2 | Петя |
|         1 |       1 | 19.06.2011 15:52 |     2 |       2 | Петя |
+-----------+---------+------------------+-------+---------+----------+
7 rows in set (0.00 sec)
нужно получить уже отсортированные записи с уникальным thread_id
Короче говоря результатом должно выйти:
Код:
+-----------+---------+------------------+-------+---------+----------+
| thread_id | post_id | date_posted      | count | user_id | username |
+-----------+---------+------------------+-------+---------+----------+
|         2 |       7 | 19.06.2011 17:31 |     3 |       1 | Вася |
|         3 |       6 | 19.06.2011 16:50 |     2 |       2 | Петя |
|         1 |       5 | 19.06.2011 16:07 |     2 |       1 | Вася |
+-----------+---------+------------------+-------+---------+----------+
можно конечно подзапросами, но хочется найти красивое решение (имхо в это в сторону group by, но пока не сообразил)

upd
хм, вопрос затронул уже троих =)

Цитата:
Сообщение от Pashkela Посмотреть сообщение
DISTINCT
он отбирает дубликаты по всей выборке, так как значения post_id разные(да и не только оно) то он тут не прокатит, ровно так же как и distinct(`thread_id`)

Цитата:
(18:53:40) xxx: по моему тебе надо тупо добавить group by thread_id
(18:54:15) n0body: =) в таком случае я получу post_id=3,2,1 соответственно
upd2. Вопрос решен, спасибо BF и Svet
__________________
Sad panda

Последний раз редактировалось nobody; 19.06.2011 в 22:58..
nobody вне форума   Ответить с цитированием
Старый 19.06.2011, 19:11   #28
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

DISTINCT
Pashkela вне форума   Ответить с цитированием
Старый 19.06.2011, 22:46   #29
Svet
 
Аватар для Svet
 
Регистрация: 11.09.2010
Сообщений: 172
Репутация: 42
По умолчанию

nobody,
Код:
SELECT 
	t.thread_id AS thread_id,
	p.date_posted AS posted_date,
	p.post_id AS post_id,
	u.username AS username,
	(SELECT 
		COUNT(*) 
	FROM 
		posts 
	WHERE 
		thread_id = p.thread_id
	) AS posts_count
FROM 
	posts AS p, 
	threads AS t,
	users AS u
WHERE
	p.thread_id = t.thread_id AND
	p.date_posted IN (SELECT MAX(date_posted) FROM posts WHERE thread_id = t.thread_id) AND
	u.user_id = p.user_id
ORDER BY
	p.date_posted
DESC
Svet вне форума   Ответить с цитированием
Старый 21.06.2011, 16:29   #30
m0Hze
 
Аватар для m0Hze
 
Регистрация: 05.07.2010
Сообщений: 326
Репутация: 129
По умолчанию

Собственно, есть вопрос, по SQL,немного не стандартный. Имеем бд, со столбиком, значения которого лежат в диапазоне от 1 до 100 включительно. Имеем число, допустим 3, для этого числа мы должны получить 3 последующих за ним значения, то есть, 4,5,6. Тут все просто, сортировка по этому полю + LIMIT 3 дает нам нужный результат. Но, как быть для числа 98?
Я должен получить 99,100,1, то есть - Mysql должно вернуть круговое значение. Можно ли сделать такую операцию средстами mysql? Так то, я решил ее с помощью php, но было бы круто, если бы можно было сделать тоже самое средствами mysql
__________________
multi-vpn.biz - Первый VPN на Эллиптических кривых со скоростью света.
m0Hze вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot