タグに基づいてデータベースからコンテンツを取得できる次のスクリプトがあります
<?php
header("Content-type: text/html; charset=UTF-8");
include 'config.php';
include 'lib.php';
error_reporting(E_ALL); // or E_STRICT
ini_set("display_errors",1);
$query = $_GET['query'];
$db = dbConnect();
$tags = explode(";", $query);
$entries = Array();
foreach($tags as $tag) {
$tag = trim($tag);
echo "<br/>".$tag;
$query = "SELECT * FROM nv_entries entries JOIN nv_tags tags on (entries.id = tags.entrie_id) join nv_images images on (tags.entrie_id = images.entrie_id) WHERE tags.tag = '$tag'";
$entrie = execSelect($query);
array_push($entries, $entrie);
}
echo "<pre>";
print_r($entries);
echo "</pre>";
// keep the ones that are there as many times as there are diferent tags
// ...
dbClose($db);
?>
たとえば、タグツリーと緑を使用すると、次のようになります。
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[band] => Green
[album] =>
[label] => ATCO
[year] => 1966
[text] => text about green.
[entrie_id] => 1
[tag] => tree
[source] => img01_4u8y5.png
)
[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
[tag] => tree
[source] => img02_9lch1.png
)
)
[1] => Array
(
[0] => Array
(
[id] => 1
[band] => Green
[album] =>
[label] => ATCO
[year] => 1966
[text] => text about green.
[entrie_id] => 1
[tag] => green
[source] => img01_4u8y5.png
)
)
)
id = 1 のものは 2 回表示されます。それはタグの合計量に等しいので、それを保持したいと思います。id = 2 のものは 1 回しか表示されないため、1 つのタグが失敗したため、必要ありません。
どうすればそれを取り除くことができますか? その後、二重のものがなくなるように配列をきれいにするにはどうすればよいですか?
編集:
これは私が探しているものに近いはずですが、エラーが発生するだけです:
クエリが失敗しました: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'GROUP BY nv_entries JOIN ON nv_entries.id = nv_tags.entrie_id AND nv_tags.tag IN' 付近で使用する正しい構文を確認してください。
以下のスクリプトで生成されるクエリは、次のようにエコーされます。
home
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>";