[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить запросик (две таблички)
Krevedko
Я чет после праздников туплю. Собственно о чем речь.
Пользователю показывается несколько картинок, он голосует за определенные. Надо, чтобы картинки, за которые он проголосовал, ему больше уже не показывались.
Есть две таблицы
Упрощенно допустим pics с полями
id, name
и таблица votes с полями
id, user_id, pics_id
В первой лежат картинки, во второй голоса пользователей.
Вот мне надо вытащить только те картинки, за которые он не голосовал..
Кто бы помог smile.gif Плюсик гарантирую smile.gif



Спустя 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 написал(а):
составлял точно такой же запрос как у инпоста перед созданием этого топика...видимо у нас мысли сходятся )))
сделал как написал Валдиком. все работает. Плюс проставил. Всем спасибо тоже.
Щас другая проблема...все смотрели фильм Социальная сеть ?
Там был скрипт...показывает две фотки. Ты их сравниваешь и выбираешь лучшую (или худшую..у меня выбирается худшая-так проще). И так до тех пор, пока не останеться одна-она как бы победитель. Т.е. в моем случае, так как выбирается худшая, лучшая фотка-это та, за которую меньше всего голосов. Но вот как отличить лучшую от недавно загруженной (логично, что за нее голосов нет) blink.gif

Спустя 6 минут, 17 секунд (26.04.2011 - 10:19) Krevedko написал(а):
Цитата (linker @ 26.04.2011 - 05:49)
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

тогда уж не равно 34 // Сюда подставить id пользователя
работать думаю небудет. так как тут и нулл может быть и айди пользователя, но не текущего, а другого. такой вариант я тоже пробовал.

Спустя 8 минут, 24 секунды (26.04.2011 - 10:27) linker написал(а):
Krevedko
А ты проверял? Думать одно, а практика - другое. Нас интересует любое 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 написал(а):
Как, как - каком к верху. laugh.gif

Показываем 2 картинки. Юзер голосует за одну. Ей ставим 1, второй ставим 0.
И определить какие фоты юзер уже видел легко. Ну.. это что первое в голову пришло.

Спустя 8 минут, 18 секунд (26.04.2011 - 11:23) Krevedko написал(а):
я думал об этом....избыточной инфы будет конечно дофига. но похоже это единственный вариант :/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.