показ банеров

Olimp

Guest
показ банеров

Имеем таблицу показа банеров (view)
User_id | baner_id

Имеем таблицу банеров (baners)
baner_id | Baner_info

Надо выбрать те baners.baner_id , которые не встречаются в показах банеров (view) для конкретного пользователя (User_id=2)

Делал через left join
Select baners.* from baners
Left join view
On view. User_id=’2’
And view.baner_id<> baners.baner_id

Пробовал менять последнюю строку на
And view.baner_id= baners.baner_id
Where baners.baner_id IS Null ничего не получилось:(

Проблема в том что связи между view.baner_id= baners.baner_id может и не быть:(
 

Profic

just Profic (PHP5 BetaTeam)
Если все правильно понял.
[sql]select * from baners where baner_id not in (select baner_id from view where user_id = 2)[/sql]
Если MySQL < 4.1 то тоже самое но в два запроса.
С джойнами ИМХО не получится.
 

alpine

Новичок
Попробуй так:
[sql]
SELECT
baners.*
FROM
baners AS b
LEFT JOIN view AS v ON b.baners_id = v.baners_id AND User_id = 2
WHERE
v.banner_id IS NULL
[/sql]

Profic
Почему не получится?

-~{}~ 21.07.05 20:10:

IMHO товарищ просто запарился с запросом. Он объединяет таблицу baners с таблицей view и ищет NULL в талице baners и естественно он его там не находит :)
 

Profic

just Profic (PHP5 BetaTeam)
alpine
хз, я как раз написал такой же запрос как и ты, но почему то решил, что он не будет работать...
 

Olimp

Guest
Спасибо большое.
Вариант alpine подошел, вроде пробовал его почему не получился не знаю:(

to Profic:
Когда увидел запрос то понравился синтаксис этот запрос тоже думаю подойдет но у меня стоит Денвер поэтому можно вопросик:
Как примерно будет выглядеть вариант с In в "два запроса" при MySQL 3. там какая-то вресия
 

Profic

just Profic (PHP5 BetaTeam)
Olimp
Тебе нужен left join, т.к. он муськой более правильно оптимизируется. А в два запроса: выполняешь то, что является вложенным селектом, выбираешь все значения, делаешь implode и подствляешь во внешний запрос получившуюся строку. Громоздко и неэффективно. В большинстве случаев.
 

antson

Новичок
Партнер клуба
убрано самостоятельно. Ответы есть в постах других авторов
 

Profic

just Profic (PHP5 BetaTeam)
antson
Скажи мне дорогой, зачем тут эта простыня? Тем более что ответ УЖЕ есть? И он устраивает автора. И работает с любой муськой одним запросом.
Да еще и про два запроса несовсем правильно - hint: [m]implode[/m]().
 

antson

Новичок
Партнер клуба
Profic
убрал свои сообщения. Вы счасливы ?
 

Profic

just Profic (PHP5 BetaTeam)
antson
Ты ври, но не завирайся. Автор топика ответил, что запрос с left join делает что нужно аж 22.07.05 01:26. Потому отмазка про простыню с часовым написанием поста не принимается.

можно ли сделать короче ?
Зачем? Чего ты краткостью хочешь добиться? Если так сильно хочется - сделай функцию и вызывай ее, но это не избавляет тебя от необходимости делать проверку на пустой результат.
 

Profic

just Profic (PHP5 BetaTeam)
antson
Про два запроса можно было оставить. Я имел претензии только с к простыне и запросу который дал alpine.
 
Сверху