Объедините результаты из двух таблиц в один набор записей - PullRequest
0 голосов
/ 20 декабря 2010

У меня есть две таблицы и элементы содержимого.

 items:|ID|menu|img

таблица

 itemcontent |ID|parent|title|content

содержание хранится в паре с элементами, родительский элемент содержит заголовок и содержимое

iхотите выполнить поиск по всем элементам, а также распечатать те записи, у которых нет заголовка в таблице itemcontent, поэтому заголовки будут напечатаны как «Пусто».поэтому распечатка выходных данных будет выглядеть примерно так:

title: test1 and ID: items.ID=1
title: Empty and ID: items.ID=2
title: Empty and ID: items.ID=3
title: test2 and ID: items.ID=4
title: Empty and ID: items.ID=5
etc...

Я попробовал следующее, а затем некоторые, но безрезультатно:

SELECT items.*, itemcontent.title, itemcontent.content
FROM items, itemcontent
WHERE itemcontent.title LIKE '%$search%'
     AND itemcontent.parent = items.ID 
order by title ASC          

Небольшая помощь будет высоко ценится

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Так как вы хотите, чтобы все строки из элементов, независимо от того, имеют ли они совпадение в itemcontent, плюс поле из itemcontent, когда есть совпадение, вам нужно использовать OUTER JOIN:

SELECT items.*, COALESCE(itemcontent.title, 'empty'), itemcontent.content
FROM items LEFT OUTER JOIN itemcontent ON itemcontent.parent = items.ID 
 WHERE (itemcontent.title LIKE '%$search%' OR itemcontent.title IS NULL)
 ORDER BY items.ID, itemcontent.title ASC    

Естьнебольшие различия между диалектами SQL (например, не во всех версиях есть COALESCE), поэтому, если вы хотите получить более точный ответ, укажите, какой продукт вы используете.

0 голосов
/ 21 декабря 2010

Просто чтобы быть уверенным, что вы захотите ORDER BY itemcontent.title, а не просто title или выберите itemcontent.title AS title? У вас есть поле с названием title в таблице предметов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...