|
|
|
| Добрый день, есть две таблицы, в каждой по 3 поля объединены в полнотекстовый, как можно сделать чтобы поиск осуществлялся по двум таблицам одновременно? то есть полнотекстовый по 6 полям в 2-х таблицах?
Спасибо! | |
|
|
|
|
|
|
|
для: AN
(04.10.2010 в 23:10)
| | (SELECT....)
UNION
(SELECT ....)
ORDER BY .... LIMIT ....;
лучше просто два запроса, сначала к одной таблице, а потом к другой. | |
|
|
|
|
|
|
|
для: heed
(05.10.2010 в 01:07)
| | а можно по подробнее? как объединить по ID ? то есть чтобы не было дубликатов, то есть первая таблица - компания, с описанием ее деятельности, а вторая таблица - ее коммерческие объявления, и нужно найти или тут или тут и вывести ссылку или на компанию или на ее объявление ...
как это лучше сделать? чтобы не мучить клиента вопросами "где искать" а чтобы искало и там и там ? | |
|
|
|
|
|
|
|
для: AN
(05.10.2010 в 01:33)
| | лично мне пока трудно так сходу сообразить какое-нибудь самое оптимальное решение :)
>как объединить по ID ?
объединить как-раз не вяжется с тем что выводится или одно или другое
самое удобное для клиента наверное вывести несколько ссылок из первой таблицы с указанием всего там найденного колличества и предложением показать все результаты.
И чуть дальше результаты второй таблицы (их, как я понял, обычно больше) c такой-же информацией и навигацией.
Или станет возможен показ на первой странице только из одной таблицы | |
|
|
|
|
|
|
|
для: heed
(05.10.2010 в 02:08)
| | дело такое:
есть таблица КЛИЕНТЫ с полями
/ ID клиент / название / описание / ключевые слова /
и есть таблица ОБЪЯВЛЕНИЯ
/ ID / ID клиент / название / описание / ключевые слова /
в каждой таблице будет индекс по трем полям - / название / описание / ключевые слова /
таблицы связаны по - ID клиент
вот я хочу сделать, чтобы поиск был сразу по двум таблицам, и дубликаты не выводились, то есть если найдет и объявление и клиента этого объявления - выводить объявление
а если найдет только клиента - выводить клиента
и это все как то в один список, можно ли обойтись без отдельных запросов в разные таблицы? | |
|
|
|
|
|
|
|
для: AN
(05.10.2010 в 20:42)
| | у меня получается только что-то сильно запутанное, скорее всего медленное, похоже на такое
SELECT IFNULL(ft2.id, 0) , IFNULL(ft2.p_id, ft1.id), IFNULL(ft2.txt, ft1.txt) FROM ft1 LEFT JOIN ft2 ON ft2.p_id=ft1.id
WHERE ft2.txt='text' OR ft1.txt='text';
даже сомневаюсь стоит-ли такое пробовать сравнить с чем-нибудь другим
// особенно безобразно со всеми этими IFNULL() | |
|
|
|
|
|
|
|
для: heed
(06.10.2010 в 00:23)
| | может имеет смысл таки делать 2 запроса в две таблицы и придумать как показывать результаты? или же формировать сводную таблицу при записи и изменении? | |
|
|
|
|
|
|
|
для: AN
(06.10.2010 в 01:21)
| | а если сделать временную таблицу куда будут записаны результаты поиска их трех таблиц, нужным образом сгруппированы и отсеяны, и с этой таблицы делать вывод, как можно привязать эту временность к сессии, чтобы отследить когда пользователь ушел и удалить эти временные результаты из этой таблицы? | |
|
|
|
|
|
|
|
для: AN
(10.10.2010 в 19:51)
| | Это не совсем про временные таблицы, Те временные таьлицы что создаются запросом CREATE TEMPORARY TABLE ....; живут пока живёт соединение (время работы php-скрипта, если используются обычные соединения).
Такое впринципе реализуемо, но требует создания и удаленния обычных таблиц вручную,
если автоматизировать создание/удаление на стороне php при помощи session_set_save_handler() это + столько таблиц сколько живых сессий.
На стороне mysql тоже можно кое-чего автоматизировать каким-нибудь
CREATE EVENT e_name
ON SCHEDULE
EVERY 1 HOUR
.........
но такое ещё и требует чтобы была возможность управлять этими самыми EVENT.
Да и вообще будет-ли тогда выгода от того что запросов один вместо двух.
Лучше-уж тогда думать как ещё можно добиться чего-то похожего на те ifnull() | |
|
|
|
|
|
|
|
для: heed
(10.10.2010 в 21:55)
| | а если таблица постоянная, и вписывать результаты с ID сессии, а потом удалять? | |
|
|
|