|
|
|
| Делаю поиск по форуму, столкнулся со следующей проблемой.
Допустим, юзер задает параметры поиска "Искать в названиях тем и в сообщениях", тоесть совпадение может быть с названием но не с сообщением, с сообщением НО не с названием, или же совпадение и тут и там =)
(простите что без дампа, смысл думаю и так понятен)
Запрос вида
SELECT `topics`.* FROM `topics`
LEFT JOIN (
SELECT `message` FROM `messages`
) AS `msg` ON `msg`.`message` LIKE '%запрос%'
WHERE `topic` LIKE '%запрос'
|
учитывает только совпадение и тут и там. Подскажите, как ограничится совпадением в любой таблице?
Попутно вопрос..
SELECT `topics`.`id`
FROM `topics`
LEFT JOIN (
SELECT `stext` , `topic`
FROM `messages`
) AS `slc` ON ( `slc`.`stext` = 'gg' AND `slc`.`topic`=`topics`.`id`)
|
возвращает все 3 существующих `topic`, несмотря на то, что таблица messages вовсе пуста.. | |
|
|
|
|
|
|
|
для: Le bien
(04.09.2008 в 17:37)
| | >Запрос вида
>
>SELECT `topics`.* FROM `topics`
>LEFT JOIN (
>SELECT `message` FROM `messages`
>) AS `msg` ON `msg`.`message` LIKE '%запрос%'
>WHERE `topic` LIKE '%запрос'
>
Зачем здесь внутренний селект?
Как соединяются таблицы?
>(простите что без дампа, смысл думаю и так понятен)
ну как? | |
|
|
|
|
|
|
|
для: Trianon
(04.09.2008 в 18:13)
| | Таблица topics:
id
name (название темы)
Таблица messages
id
topic (это id поля в таблице topics)
stext (cообщение)
Внутренний запрос нужен т.к. мы выводим темы в которых есть похожие сообщения
зы: ответ на второй вопрос не нужен, JOIN помог. Буду лишь признателен, если в двух словах сможете объяснить разницу между LEFT JOIN, RIGHT JOIN, JOIN.. Как я понимаю, LEFT возвращает результат селекта, RIGHT - результат подзапроса, JOIN лишь учитывает условие? | |
|
|
|
|
|
|
|
для: Le bien
(04.09.2008 в 18:20)
| | нет.
Разница проявляется тогда, когда условие соединения таблиц не выполняется.
попробуйте создать пару таблиц с непересекающимися ячейками и выполнить все три запроса. Разницу тут же увидите.
a.x 1 3 5
b.y 2 3 6
SELECT x,y FROM a JOIN b ON x = y
SELECT x,y FROM a LEFT JOIN b ON x = y
SELECT x,y FROM a RIGHT JOIN b ON x = y
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.09.2008 в 18:31)
| | Спасибо, разобрался.
Хотелось бы вернуться к теме. Можно ли как то добавить условие "ИЛИ" в запрос? | |
|
|
|
|
|
|
|
для: Le bien
(04.09.2008 в 18:47)
| | WHERE name LIKE '%запрос%' OR message LIKE '%запрос%' | |
|
|
|
|
|
|
|
для: Trianon
(04.09.2008 в 18:57)
| | 0_o
меня самого поражает порой моя глупость.. | |
|
|
|