2013-11-18 5 views
1

Я пытаюсь вывести список «элементов», которые содержат список «тегов». Поскольку теги используются более чем для одного элемента, я использую таблицу моста, называемую «tag_rel».Left Join tag table

$query = mysql_query("SELECT i.*, t.name 
       FROM items AS i 
       LEFT JOIN tag_rel AS tr ON (tr.item = j.id) 
       LEFT JOIN tags AS t ON (t.id = tr.tag) 
       ORDER by i.id DESC"); 
while($row = mysql_fetch_array($query)){ 

Я предполагаю, что это даст мне список моих предметов. Но как мне выводить список заданных тегов для каждого элемента?

Я знаю, что не должна делать второй запрос для каждого запроса, я, е:

$query = mysql_query("SELECT i.* 
       FROM items AS i 
       ORDER by i.id DESC L"); 
while($row = mysql_fetch_array($query)){ 

    $query2 = mysql_query("SELECT t.name 
         FROM tag_rel AS tr 
         LEFT JOIN tags AS t ON (t.id = tr.tag) 
         WHERE tr.item=$row[id]"); 
    while($row2 = mysql_fetch_array($query)){ 

Любые советы?

Большое спасибо!

+1

Первый запрос будет повторять все элементы для каждого * тег * правильно? Таким образом, вы можете сделать эту логику на PHP. Сохраняйте информацию о товаре в var, в другой, укажите информацию о тегах. Когда элемент изменяется, напечатайте элемент и его теги, а затем запустите его снова. – DontVoteMeDown

+0

Да .. он должен работать. – DontVoteMeDown

+1

, в то время как элемент - то же самое, делайте одно, иначе делайте другое. – Strawberry

ответ

1

Попробуйте это:

SELECT i.*, GROUP_CONCAT(t.name) tagList 
FROM items AS i 
LEFT JOIN tag_rel AS tr ON (tr.item = j.id) 
LEFT JOIN tags AS t ON (t.id = tr.tag) 
GROUP BY i.id 
ORDER BY i.id DESC 
+0

так как я могу вывести список тегов? – James

+0

В столбце 'tagList' вы получите все теги для определенных элементов. –

+0

Хорошо, но у меня на самом деле нет столбец tagList в моей таблице. Мы на одной странице? – James