2012-07-03 81 views
0

我有這個SQL是由別人的幫助。得到所有標籤與sql查詢

$sql =" 
select e.*, i.*, group_concat(t.tag separator ',') as tag_list 
from nv_entries e 
JOIN nv_tags t on t.entrie_id = e.id 
LEFT JOIN nv_images i on i.entrie_id = e.id 

where t.tag in ($tag_list) 
group by e.id 
having count(t.id) = $num_tags "; 

結果是這樣的(我只顯示一個entrie在這裏,可能是更多):

[1] => Array 
     (
      [id] => 2 
      [band] => Kids for Cash 
      [album] => No More Walls E.P. 
      [label] => 
      [year] => 1986 
      [text] => Text about album kids for cash. 
      [entrie_id] => 2 
      [source] => img02_9lch1.png 
      [tag_list] => tree 
     ) 

對於標籤,我必須表明,entrie的所有標籤和突出的標記,用於獲得結果的地方。在這種情況下,[tag_list] => tree僅顯示一個標籤,即在搜索字段中使用的標籤。我的問題是,我怎麼能得到這樣的結果?:

  ... 
      [tag_list] => tree, green, foo, bar 
      [used_tags] => tree 
     ) 

作爲陣列還不錯,但後來也請當它是一個數組只是一個項目。

+0

你的查詢已經這樣做了。但是由於'HAVING'子句,您將結果限制爲只有具有特定數量標籤('$ num_tags')的結果。嘗試刪除'HAVING'子句並查看它是否可以正常工作。 –

+0

現在更清楚了。我認爲你們正在嘗試2種相互排斥的事情:1.獲得所有搜索結果(包括count()...)2.獲得所有搜索結果的標籤 –

+0

yes伊萬正確! :) – clankill3r

回答

1

如果我理解正確地使用> =在具有條件

$sql =" 
select e.*, i.*, group_concat(t.tag separator ',') as tag_list 
from nv_entries e 
LEFT JOIN nv_images i on i.entrie_id = e.id 
JOIN nv_tags t on t.entrie_id = e.id 

where t.tag in ($tag_list) 
group by e.id 
having count(t.id) >= $num_tags "; 

ADD

子查詢的方法:

$sql =" 
select e.*, i.*, group_concat(t.tag separator ',') as tag_list 
from nv_entries e 
JOIN nv_tags t on t.entrie_id in (
select se.id 
from nv_entries se 
JOIN nv_tags st on st.entrie_id = se.id 

where st.tag in ($tag_list) 

group by se.id 
having count(st.id) >= $num_tags 

) 
    LEFT JOIN nv_images i on i.entrie_id = e.id 
    WHERE 1 
    group by e.id 
"; 

進入子查詢我得到entrie就吃的ID列表中的至少請求標籤,然後在主要查詢我得到所有infox

ADD fixed query(見提問者評論)

子查詢的方式,解決「e」和「T」之間失去連接:

$sql =" 
select e.*, i.*, group_concat(t.tag separator ',') as tag_list 
from nv_entries e 
JOIN nv_tags t on t.entrie_id = e.id 
    LEFT JOIN nv_images i on i.entrie_id = e.id 
    WHERE e.id in (
select se.id 
from nv_entries se 
JOIN nv_tags st on st.entrie_id = se.id 

where st.tag in ($tag_list) 

group by se.id 
having count(st.id) >= $num_tags 

) 
    group by e.id 
"; 
+0

好吧,這顯示使用的標籤,但不是所有的標籤。 所以它是正確的。 '[tag_list] =>綠色,tree'顯示我在搜索查詢中鍵入的2個標籤,但除此之外,我還需要從entrie中獲取其他標籤。我希望我明確自己。 – clankill3r

+0

希望你不要爲我感到厭煩,你的更新會從組合條目返回標籤,例如:[tag_list] => rousseau,綠色,木質,帶狀照片,12IN,樹,文明,Atco,20世紀60年代,Fuzz,rousseau,森林,樂隊照片,12IN,樹,文明,法蘭絨,交叉雙臂'也發現更多的結果然後以前(結果不應該在那裏)。如果你看看我的第一篇文章中的最後一個代碼塊,那麼非常歡迎。 感謝迄今。 – clankill3r

+0

我修復了查詢,也留下了「破」一個您的評論。 –