|
 3.8 Кб |
|
| Пожалуйста, помогите составить правильный запрос.
Есть 4 таблицы:
articles
id
pid
full_text
|
В приложенном файле (картинка) я схематично показал структуру базы данных.
Вопрос: можно ли обойтись одним запросом:
SELECT articles.*, toc.*, issues.*, categs_en.* FROM toc, issues, categs_en
WHERE articles.full_text LIKE ‘%test%’ AND toc.art='6921' AND issues.id=toc.pid AND categs_en.id=issues.pid
|
Данный запрос не работает... Он выводит слишком много результатов.
Вообще вся сложность состоит в том, чтобы определить путь этой статьи. В таблице categs_en хранятся категории/подкатегории, у которых указан путь (своя папка). В итоге получается ссылка типа /magazines/electro/gym/.
Буду очень благодарен, если поможете... А то уже несколько дней бьюсь с этим запросом. | |
|
|
|
|
|
|
|
для: Fix
(01.12.2008 в 10:56)
| | использовать имя pid для чего-либо, кроме ссылки на свой собственный первичный ключ - это вносить нездоровую путаницу. | |
|
|
|
|
|
|
|
для: Trianon
(01.12.2008 в 11:03)
| | согласен, там вообще много неадекватных решений.
Дело в том, что сайт работает уже много лет, и у неё огромная база статей. Переделывать её нет смысла. Моя задача - просто сделать поиск по этой базе... | |
|
|
|
|
|
|
|
для: FiX
(01.12.2008 в 11:08)
| | Итак, вопрос решен. Теперь другое - как вывести количество найденных статей в базе?
SELECT articles . * , COUNT( * ) AS totct, toc.id AS tocid, toc.pid AS tocpid, toc.art AS tocart,
issues.id AS issuesid, issues.pid AS issuespid, categs_en.id AS catid,
categs_en.pid AS catpid, categs_en.link AS catlink
FROM articles, toc, issues, categs_en
WHERE (
articles.full_text LIKE '%сердце%'
AND toc.art = articles.id
AND issues.id = toc.pid
AND categs_en.id = issues.pid
)
GROUP BY articles.id
|
И вообще, реально ли это? Данный запрос выводит 1. Почему? :)
Просто база данных очень большая (~200Mb), и не хочется делать еще один запрос чтобы узнать количество найденных статей. | |
|
|
|