Пользователю показывается несколько картинок, он голосует за определенные. Надо, чтобы картинки, за которые он проголосовал, ему больше уже не показывались.
Есть две таблицы
Упрощенно допустим pics с полями
id, name
и таблица votes с полями
id, user_id, pics_id
В первой лежат картинки, во второй голоса пользователей.
Вот мне надо вытащить только те картинки, за которые он не голосовал..
Кто бы помог Плюсик гарантирую
Спустя 10 минут, 54 секунды (25.04.2011 - 23:49) Игорь_Vasinsky написал(а):
Цитата |
id, user_id, pics_id |
умпростить до
id, user_id
и в user_id писать id юзеров через запятую
А при заходе юзера выводить так:
SELECT * FROM `table` WHERE `user_id` NOT LIKE '%".id.",%'
именно '".id.",' (id юзера, с запятой, а то например 12 LIKE 121 ;)
а id - в обоих табицах - id картинок
Спустя 2 минуты, 31 секунда (25.04.2011 - 23:52) waldicom написал(а):
SELECT * FROM pics p
WHERE p.id not IN (SELECT pics_id FROM votes WHERE user_id = XXX)
ы? Хотя я лично не очень люблю подзапросы. Да и быстродействие такого запроса под вопросом.
Спустя 4 минуты, 20 секунд (25.04.2011 - 23:56) Krevedko написал(а):
вот без подзапроса никак нельзя ?
я пытался джойном, но не могу составить условие (
я пытался джойном, но не могу составить условие (
Спустя 7 часов, 49 минут, 36 секунд (26.04.2011 - 07:46) Michael написал(а):
SELECT pics.id, pics.name
FROM pics
LEFT JOIN
(
SELECT pics_id
FROM votes
WHERE user_id = %d
) np
ON pics.id = np.pics_id
WHERE np.pics_id IS NULL
Спустя 9 минут, 33 секунды (26.04.2011 - 07:55) inpost написал(а):
Krevedko
Вот тебе без подзапросов
Вот тебе без подзапросов
SELECT t1.id,t1.name
FROM pics t1
LEFT JOIN votes t2 ON t2.`pics_id` = t1.`id`
WHERE t2.`pics_id` IS NULL
Спустя 44 минуты, 28 секунд (26.04.2011 - 08:40) Michael написал(а):
inpost, выборка идет для определенного пользователя, т.е. в запросе где то должен фигурировать айдишник пользователя.
Спустя 8 минут, 47 секунд (26.04.2011 - 08:49) linker написал(а):
SELECT
`pics`.`id`, `pics`.`name`
FROM
`pics`
LEFT JOIN
`votes`
ON
`votes`.`pics_id` = `pics`.`id` AND `votes`.`user_id` = 34 // Сюда подставить id пользователя
WHERE
`votes`.`pics_id` IS NULL
Спустя 1 час, 23 минуты, 54 секунды (26.04.2011 - 10:12) Krevedko написал(а):
составлял точно такой же запрос как у инпоста перед созданием этого топика...видимо у нас мысли сходятся )))
сделал как написал Валдиком. все работает. Плюс проставил. Всем спасибо тоже.
Щас другая проблема...все смотрели фильм Социальная сеть ?
Там был скрипт...показывает две фотки. Ты их сравниваешь и выбираешь лучшую (или худшую..у меня выбирается худшая-так проще). И так до тех пор, пока не останеться одна-она как бы победитель. Т.е. в моем случае, так как выбирается худшая, лучшая фотка-это та, за которую меньше всего голосов. Но вот как отличить лучшую от недавно загруженной (логично, что за нее голосов нет)
сделал как написал Валдиком. все работает. Плюс проставил. Всем спасибо тоже.
Щас другая проблема...все смотрели фильм Социальная сеть ?
Там был скрипт...показывает две фотки. Ты их сравниваешь и выбираешь лучшую (или худшую..у меня выбирается худшая-так проще). И так до тех пор, пока не останеться одна-она как бы победитель. Т.е. в моем случае, так как выбирается худшая, лучшая фотка-это та, за которую меньше всего голосов. Но вот как отличить лучшую от недавно загруженной (логично, что за нее голосов нет)
Спустя 6 минут, 17 секунд (26.04.2011 - 10:19) Krevedko написал(а):
Цитата (linker @ 26.04.2011 - 05:49) |
SELECT |
тогда уж не равно 34 // Сюда подставить id пользователя
работать думаю небудет. так как тут и нулл может быть и айди пользователя, но не текущего, а другого. такой вариант я тоже пробовал.
Спустя 8 минут, 24 секунды (26.04.2011 - 10:27) linker написал(а):
Krevedko
А ты проверял? Думать одно, а практика - другое. Нас интересует любое id пользователя отличное от того, который голосует в данный момент, поэтому NULL там или какое другое значение - не важно.
Вариация на тему
А ты проверял? Думать одно, а практика - другое. Нас интересует любое id пользователя отличное от того, который голосует в данный момент, поэтому NULL там или какое другое значение - не важно.
Вариация на тему
SELECT
`pics`.`id`, `pics`.`name`
FROM
`pics`
LEFT JOIN
`votes`
ON
`votes`.`pics_id` = `pics`.`id`
WHERE
`votes`.`user_id` <> 34 OR `votes`.`pics_id` IS NULL
Спустя 8 минут, 35 секунд (26.04.2011 - 10:36) Krevedko написал(а):
да, проверил верхнее. работает.
твой вариант быстрее ?
твой вариант быстрее ?
Спустя 39 секунд (26.04.2011 - 10:36) linker написал(а):
Не знаю, бенчмарком не занимался. Сделай EXPLAIN, посмотри на результаты, оцени. Индексы расставь.
Спустя 11 минут, 51 секунда (26.04.2011 - 10:48) Krevedko написал(а):
ок. спасибо. а что скажете по поводу проблемы
Цитата |
Щас другая проблема...все смотрели фильм Социальная сеть ? Там был скрипт...показывает две фотки. Ты их сравниваешь и выбираешь лучшую (или худшую..у меня выбирается худшая-так проще). И так до тех пор, пока не останеться одна-она как бы победитель. Т.е. в моем случае, так как выбирается худшая, лучшая фотка-это та, за которую меньше всего голосов. Но вот как отличить лучшую от недавно загруженной (логично, что за нее голосов нет) |
мне бы алгоритм..что-то пока на ум ничего не приходит.
просто у них проще было. у них была база фоток. а у меня фотки подгружают юзеры, причем уже во время голосования.
все работает, если каждый пройдет все фотки до конца...но вот свежую фотку всегда показывает победителем.
Спустя 44 секунды (26.04.2011 - 10:49) ApuktaChehov написал(а):
А почему бы не выбрать из `votes` те ряды , за которые юзер не голосовал, и присоединить к результату соответствующую картинку?
А почему вы решили наоборот голоса присваивать?
А почему вы решили наоборот голоса присваивать?
Спустя 2 минуты, 20 секунд (26.04.2011 - 10:51) Krevedko написал(а):
у меня щас стоит
такой запрос. он выбирает фотки, за которые не было голосов -хуже. Ессно за свежак таких голосов тоже нет.
$this->db->select('`comparisons`.`file_name`, `comparisons`.`title`, COUNT(`votes`.`count`) as v');
$this->db->from('comparisons');
$this->db->join('votes', 'comparisons.id = votes.comparison_id', 'left');
$this->db->group_by('votes.comparison_id');
$this->db->order_by('v');
$query = $this->db->get();
$result = $query->result_array();
такой запрос. он выбирает фотки, за которые не было голосов -хуже. Ессно за свежак таких голосов тоже нет.
Спустя 4 минуты, 56 секунд (26.04.2011 - 10:56) Krevedko написал(а):
да вот уже думаю сделать наоборот..считать, у кого больше голосов...но тогда затык с голосованием. как определить тогда какие картинки НЕ показывать
Спустя 18 секунд (26.04.2011 - 10:57) ApuktaChehov написал(а):
Разве не логичнее голосовать за тех, кто больше нравится?
Спустя 1 минута, 47 секунд (26.04.2011 - 10:58) Krevedko написал(а):
читай выше
Спустя 2 минуты, 2 секунды (26.04.2011 - 11:00) Krevedko написал(а):
вот смотри смысл. показываются две фотографии. Ты выбираешь правую, мол она мне больше нравится. В базу пишется айди юзера и айди этой картинки. Как теперь определить, что для ЭТОГО юзера левую уже нельзя показывать, он ее отбраковал. Как ее отличить от остальных непоказанных, тоже без оценки ?
В моем случае, когда вариант Хуже-хуже это определяется. Но проблема с рейтингом. А тут проблема с показами. Короче кругом простите жо...
В моем случае, когда вариант Хуже-хуже это определяется. Но проблема с рейтингом. А тут проблема с показами. Короче кругом простите жо...
Спустя 14 минут, 48 секунд (26.04.2011 - 11:15) ApuktaChehov написал(а):
Как, как - каком к верху.
Показываем 2 картинки. Юзер голосует за одну. Ей ставим 1, второй ставим 0.
И определить какие фоты юзер уже видел легко. Ну.. это что первое в голову пришло.
Показываем 2 картинки. Юзер голосует за одну. Ей ставим 1, второй ставим 0.
И определить какие фоты юзер уже видел легко. Ну.. это что первое в голову пришло.
Спустя 8 минут, 18 секунд (26.04.2011 - 11:23) Krevedko написал(а):
я думал об этом....избыточной инфы будет конечно дофига. но похоже это единственный вариант :/