Моя структура БД выглядит следующим образом: категории таблицыПраво запроса, чтобы ограничить результаты поиска
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| parent_id | int(11) | NO | | NULL | |
| title | varchar(260) | NO | | NULL | |
| slug | varchar(260) | NO | | NULL | |
| custom | int(11) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
category_to_content стол
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| category_id | int(11) | NO | | NULL | |
| content_id | int(11) | NO | | NULL | |
+-------------+---------+------+-----+---------+----------------+
И content
стол:
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| heading | varchar(200) | NO | | NULL | |
| subheading | text | NO | | NULL | |
| content_text | longtext | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
Как вы можете видеть, типичная модель списка смежности в таблице categories
, category_to_content
здесь, потому что некоторые категории имеют одинаковый контент ... В настоящее время существует 4 уровня, а категории «уровень 0» на самом деле являются большими/основными категориями (информационные базы в этот случай), и я хочу ограничить поиск JUST (суб) категориями/содержанием, которые принадлежат: Текущий уровень 0 Категория (parent_id уровня 0 категории, ну .. 0).
Я использую CodeIgniter, класс конструктор запросов (не обязательно, я могу использовать простой запрос SQL, также, если это необходимо), и возвращается запрос выглядит следующим образом:
SELECT `heading`, `slug`
FROM `content`
JOIN `category_to_content` ON `category_to_content`.`content_id` = `content`.`id`
JOIN `categories` ON `categories`.`id`=`category_to_content`.`category_id`
WHERE `categories`.`id` IN('1,2,3') // current level 0 category //subcategories id's, 12,3, just as example...
AND (
`content`.`heading` LIKE '%pod%'
OR `content`.`subheading` LIKE '%pod%'
)
LIMIT 10
Однако это не возвращать желаемые результаты во всех случаях. Если я удалю круглые скобки из части запроса, я получил результаты, НО из всех основных категорий. В скобках нет результатов, в большинстве случаев ...
E.g. когда поисковый запрос «около», я получил правильные результаты, когда я пытаюсь использовать «подиатрию» - никаких результатов. Образец данных:
Просто чтобы прояснить - В часть работает отлично, я получил должный уровень 0 Подкатегории IDS на каждой странице.
Если вы не видите мою ошибку (возможно, что-то тривиальное для гуру MySQL), я могу отправить образцы данных (экспорт из PhPMyAdmin).
EDIT1: Пример: Когда я набираю 'pod', я хотел бы получить slug из таблицы категорий -> 'podiatry' и заголовок из таблицы content - 'What is podiatry'. Интересно, когда я набираю 'about', я получаю желаемые результаты (от желаемого уровня 0 SUB категории). экспорт DB - как можно быстрее, так что вы можете проверить по вашей собственной личности ...
EDIT2: Ссылка на выборку данных: http://pastebin.com/YHziZH8f
EDIT3: в этом случае, я сделал 3 основные/level0 категории (Podiatry - кошка ID = 1, infobase2, cat id = 208, test3, cat id = 213). У всех (почти) есть некоторые подкатегории и связанный с ними контент. Если мы находимся на странице «podiatry» - current level 0 category subcategories should be searched
. Я хочу ограничить поиск только этими подкатегориями (текущий 0 подкатегорий). Итак, если я на странице «podiatry», мне нужно «о» содержание только для категории подиатрии (нет «около» из/для остальных категорий).
EDIT4:
Пример успешного запроса:
SELECT `heading`, `slug`
FROM `content`
JOIN `category_to_content` ON `category_to_content`.`content_id` = `content`.`id`
JOIN `categories` ON `categories`.`id`=`category_to_content`.`category_id`
WHERE `categories`.`id` IN('209,210,211,212')
AND (
`content`.`heading` LIKE '%about%'
OR `content`.`subheading` LIKE '%about%'
)
LIMIT 10
я получил: заголовок 'О Infobase2' и 'о-infobase2' слизняк.
Второй термин поиска:
SELECT `heading`, `slug`
FROM `content`
JOIN `category_to_content` ON `category_to_content`.`content_id` = `content`.`id`
JOIN `categories` ON `categories`.`id`=`category_to_content`.`category_id`
WHERE `categories`.`id` IN('209,210,211,212')
AND (
`content`.`heading` LIKE '%categ%'
OR `content`.`subheading` LIKE '%categ%'
)
LIMIT 10
Нет результатов. Если вы проверите пробные данные, вы увидите, что в таблице категорий есть категория 2 (id = 210), на которую ссылаются: category_id 210, идентификатор контента 48, в таблице категории_о_контента и заголовок категории 2 в таблице содержимого (id = 48). Что я делаю неправильно ... Я не могу получить эти данные. :(
Данные образца и желаемый результат, пожалуйста, – Strawberry
Я не вижу категории уровня 0 в таблице 'category_to_content' (по крайней мере, в том, что вы здесь показываете). Можете ли вы показать соответствующие данные? –
Да, пожалуйста, дайте мне несколько минут. @caCtus, уровень 0 категорий не содержит контента, я вышлю mysql-дамп за несколько минут и отредактирую вопрос, чтобы показать желаемые результаты ... – sinisake