Поиск по LIKE таблица + справочная таблица

php MySQL поиск справочник like

P.S. повторяю вопрос, потому что не сразу заметил, что поставил не 99, а 5 баллов )

Как искать в таблице текст, если он сам хранится в таблице-справочнике под определенным id, а в таблице, где ищем хранится только id? И как сделать этот поиск, если таких ссылок на индексы одного и того же справочника несколько? Желателен вариант без подзапросов и джойна, если возможно.

Пример структуры:

table1
---------
id
text_id1
text_id2

значения

1,1,2,
2,1,2,
3,3,1;

table2 (справочная)
---------
text_id
text_value

1, 'слово',
2, 'словесный',
3, 'словоформирование';

Дается поиск '%слово%' в table1 по всем полям.

Заранее спасибо.

Примечание:
>> у тебя неправильная структура базы данных.

Как-то не сразу соглашусь. Представь на примере новостей и категорий новостей. В каждой новости ты предлагаешь писать категорию в виде текста? Я делаю таблицу справочник категорий, а в самой записи новости пишется только id категории.

Примечание:
>> А если тебе нужно будет 10,20,30 категорий в одной новости? Тогда ты 30 полей добавлять будешь?

Ну здесь ты полностью прав и твоя идея мне теперь полностью понятна. Если бы категорий было множество, я бы именно так и сделал бы (делать кучу полей в таблице точно бы не стал). Вот только у меня сейчас уже работающий проект, который переделывать по уму выйдет дольше, чем делать новый :) Структура таблиц мало того, что сформирована, но и завязана на сам код. Учитывая, что я самоучка, а заказчик мечтает в режиме риалтайм, то переделка обойдется слишком дорого, хотя бы потому, что даже создание темповой таблицы с интерпретированными ключами выйдет "дешевле".

Завтра поищу где я видел в мане пример запроса без джойна. Пример: SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE t1.name = t2.name;

Примечание:
>> OverHerz
Сделал на LEFT JOIN.
Пришлось расставлять синонимы через AS, ибо как ты уже говорил структура таблицы неправильная и в поисковой таблице записываются сразу несколько индексов при одной справочной таблице.

Ставлю тебе лучший, ибо упомянута крайне полезная ссылка.

Отдельное спасибо Epsiloncool - тоже помог советами. Жаль не могу разделить на вас баллы, не предусмотрено.
Ответы:
как я уже писал в прошлой теме, у тебя неправильная структура базы данных. Есть такое понятие как нормальная форма. http://ru.wikipedia.org/wiki/Нормальная_форма
ты ее нарушаешь
select t1.id from table1 as t1 where t1.text_id1 in (select t2.id from table2 as t2 where t2.text_value like '%слово%')
за него может и не сажают, но и помимо более простых запросов это больше ничего не дает. В сложных системах за такое бы расстреляли, потому что потом на обработку этих ошибок ушла бы куча человеко-часов, и появилась бы куча костылей. 3-я нормальная форма не страшная, в ней ничего сложного нет.
Достаточно представить, если из второй таблицы начнут удалять слова...
а, ну так бы и сказал, что проект уже работает. Тут конечно совсем другой разговор, лишь бы таск закрыть.
>> Завтра поищу где я видел в мане пример запроса без джойна. Пример:  SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE t1.name = t2.name;


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.