SQL-запрос поиска в таблицах отношений

0

Я пытаюсь сделать поисковый запрос sql, чтобы возвращать только ORDERS, которые соответствуют ключевому слову поиска. Проблема в том, что мне также нужно искать в каждом органе комментариев для каждого заказа, и если результат найден в этом комментарии, должен быть выбран порядок для этого комментария. Таблицы выглядят следующим образом:

ORDERS:

ID = 95
title = first order


COMMENT RELATIONS:
id = 1241
comment_id = 500
target_id = 95
type = order

COMMENTS: 
id = 500
body = this is the first comment

Поэтому, если я искал "первый комментарий", должен быть выбран заказ с идентификатором 95.

Моя текущая попытка, кажется, выбирает больше, чем порядок, а также их комментарии и отношения? Вот как выглядит моя текущая попытка.

$query = 'SELECT DISTINCT *
FROM orders as o
LEFT JOIN comment_relations as cr ON o.id = target_id
LEFT JOIN comments as c ON cr.comment_id = c.id
WHERE o.id LIKE :keyword OR o.title LIKE :keyword OR c.body LIKE :keyword';
Теги:
search
pdo

2 ответа

1

Не знаете, какую базу данных вы используете, но в большинстве баз данных вы можете использовать псевдоним таблицы, следуя * для выбора только одной таблицы.

'SELECT DISTINCT o.*
FROM orders as o
LEFT OUTER JOIN comment_relations as cr ON o.id = target_id
LEFT OUTER JOIN comments as c ON cr.comment_id = c.id
WHERE o.id LIKE :keyword OR o.title LIKE :keyword OR c.body LIKE :keyword';
  • 0
    спасибо, это приближает меня Проблема, которую я заметил сейчас, состоит в том, что я ТОЛЬКО получаю комментарии внутри своего результата. Если я ищу идентификатор заказа, я получаю его комментарии обратно. Что мне нужно, так это вернуть порядок, связанный с этим комментарием.
  • 0
    @JarJarJosh Я не уверен, что понял вопрос, но в списке выбора мы выбираем o. *, Что означает, что он показывает только поля заказа. Вы можете изменить запрос на «SELECT DISTINCT o.id, c.body ...», чтобы выбрать идентификатор заказа и его комментарий.
Показать ещё 2 комментария
0

Согласно вашей концепции, я создаю 3 демо-таблицы в phpmyadmin, описание которых приведено здесь.

1.orders имеют столбцы (id, title).

2.comment_relations имеют столбцы (id, comment_id, target_id, type).

3.Комментарии имеют столбцы (id, body).

Это SQL Query для извлечения записей из ключевого слова order by match из таблицы комментариев.

select DISTINCT o.* from orders o LEFT JOIN comment_relations cr ON o.id=cr.target_id LEFT JOIN comments c ON c.id=cr.comment_id where body LIKE '%keyword%'

При применении этого запроса, заменив ключевое слово на месте ключевого слова, вы получите этот результат.

Изображение 174551

Здесь я сопоставляю ключевое слово "первый комментарий"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню