1

エラーはクエリの一部のみを示していますが、誰かが私が犯した間違いを見ることができますか?

私が欲しいのは、タグに基づいてエントリを取得することです。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構文にエラーがあります。1行目の「GROUPBYnv_entriesJOIN ON nv_entries.id = nv_tags.entrie_id AND nv_tags.tag IN」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

以下のスクリプトで生成されるクエリは、次のようにエコーされます。

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>";
4

1 に答える 1

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 ";
于 2012-07-02T19:29:35.790 に答える