2012-07-02 62 views
1

錯誤只顯示部分查詢,有人可以看到我犯的錯誤嗎?mysql查詢失敗原因不明(對我來說)

我想要的是基於標籤獲取條目,有3個表格,nv_entries,nv_tags和nv_images。如果標籤位於nv_tags表中,那麼它應該使用該表中的entrie_id從nv_entries和nv_images中獲取內容。

的表是這樣的:

nv_entries: 
id - title - year - etc.. 

nv_tags: 
id - entrieid - tag 

nv_images: 
id - entrieid - source 

查詢失敗:您的SQL語法錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在第1行的'GROUP BY nv_entries JOIN ON nv_entries.id = nv_tags.entrie_id AND nv_tags.tag IN'處使用正確的語法。

在腳本如下echod這樣的:

GROUP BY nv_entries JOIN ON nv_entries.id = nv_tags.entrie_id AND nv_tags.tag IN ('tree','green') HAVING COUNT(DISTINCT nv_tags.tag) = 2

這是腳本(部分):

for ($i = 0; $i < count($tags); $i++) { 
    $tags[$i] = trim($tags[$i]); 
} 

$query = "GROUP BY nv_entries JOIN ON nv_entries.id = nv_tags.entrie_id AND nv_tags.tag IN ("; 
// add with following comma 
for ($i = 0; $i < count($tags)-1; $i++) { 
    $query .= "'".$tags[$i]."',"; 
} 
// add last without a comma 
$query .= "'".$tags[count($tags)-1]."'"; 

$query .= ") HAVING COUNT(DISTINCT nv_tags.tag) = ".count($tags); 

echo $query; 

$entries = execSelect($query); 


echo "<pre>"; 
print_r($entries); 
echo "</pre>"; 
+1

查詢的第一部分在哪裏(例如'SELECT this FROM that ...')? – Wiseguy

+0

是的,當組合隨機的SQL子句時,通常不會獲得有效的SQL。什麼不清楚? –

+0

'GROUP BY'和'JOIN'的順序錯誤,'JOIN'和'ON'之間缺少一些東西。 – Gumbo

回答

2

您所查詢的格式不正確!

草案冷如下所示:

$sql =" 
select e.* 
from nv_entries e 
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 "; 

添加具有圖像

加入這個查詢將返回每個圖像1線,採用LEFT避免錯過行,如果丟失的圖像。

$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 "; 
+0

感謝你的選秀票值得黃金,這似乎奏效。 圖像的連接應該在哪一行? (如果沒有圖像,這是否必須是左連接?) – clankill3r

+0

請幫忙,我試圖在多個部分粘貼'JOIN nv_images i on i.entrie_id = e.id',但沒有成功。最後,我還會選擇屬於該entrie的所有標籤。 – clankill3r

+0

'查詢失敗:'字段列表'中的未知列'e.tag'我將第一行更改爲希望修復它:'select e。*,i。*,t。*,group_concat(t。標籤分隔符',')作爲tag_list '沒有錯誤,但當我回顯我看到[[標籤] =>樹 [tag_list] =>樹',其中只有使用的標籤顯示,而entrie有更多的標籤。它顯示了雙倍不錯,但其中任何一個都應該包含所有標籤。 感謝您的幫助至今 – clankill3r