![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Задача:
есть список слов для поиска, типа - 'слово1,слово2,....'
Нужен такой запрос, который вернул бы такую таблицу:
word find Слово1 0 Слово2 1 Слово3 1
где 1 или 0 - найдено слово или нет, т.е. запрос должен вернуть все слова, которые ему передали, а не только те, которые найдены. Чета никак не соображу...
Заранее спасибо.
Неактивен
Пока решил через временную таблицу вот так:
Отредактированно Shopen (30.05.2008 16:50:22)
Неактивен
Без временной таблицы тут имхо не обойтись. Я думаю, что это вполне естественное решение для набора сущностей, каждой из которых нужно сопоставить какую-то информацию
(путано, конечно, выразился.. надеюсь, поймете)
Как подсвечивается код, можно прочитать здесь:
http://webew.ru/articles/412.webew
Отредактированно LazY (30.05.2008 06:00:36)
Неактивен
Неактивен
Слушай, точно..
Видимо, спать пора.
Неактивен
vasya написал:
select temp.word, if(id is not null,1,0) as find
from base right join
(select 'слово1' as word union
select 'слово2' union
select 'слово3') as temp on temp.word=base.word;
P.S. Для подсветки [ syntax=mysql ] ... [ /syntax ]
хм... про Union я как то и забыл...
а mysql-ю не будет рвать крышу от такого union если слов будет 1000-2000 и >?
Отредактированно Shopen (30.05.2008 16:47:14)
Неактивен
Shopen написал:
а mysql-ю не будет рвать крышу от такого union если слов будет 1000-2000 и >?
Попробуйте, на самом деле интересно как mysql отработает такой UNION. Возможно, в асимптотике временная таблица будет быстрее.
Неактивен
Попробовал.
крышу вроде не рвет. Но какой прекрасный explain у такого запроса )
понять по нему что либо - невозможно, а оценка производительности очень важна. Я так понмаю, это все таки не очень правильное использование union
так что пока сделал на временных таблицах. Других нормальных вариантов вроде нету..
Отредактированно Shopen (10.06.2008 13:20:24)
Неактивен