0

カテゴリに関連するトピックの組み合わせが一意であるかどうかを判断しようとしています。これは、トピックをカテゴリに追加するときに行われます。一意性は次のクエリでチェックされます。

$sql_unique = "SELECT Categories_CategoryID, list
FROM (

SELECT Categories_CategoryID, GROUP_CONCAT( Topics_TopicID ) AS list
FROM (

SELECT *
FROM Topics_crosstable
ORDER BY Topics_TopicID
)H
GROUP BY Categories_CategoryID
)A
WHERE list = (
SELECT GROUP_concat( TopicID )
FROM Topics
WHERE Name = 'nr1'
OR Name = 'nr2'
ORDER BY Categories_CategoryID ASC )";


$result = mysql_query($sql_unique);
echo mysql_num_rows($result);

 if($result > 1)
 {
    echo' HELP! It is not unique';
 }
 else
 {
 echo ' getshere';
 }

これは正常に機能します。ただし、問題は、追加されるトピックの数が異なることです。では、クエリのwhereセクションにforループを含める方法はありますか?

for(追加されたトピックの数; nr ++){OR Name ='、$inserted_topicName'}のようなもの

4

2 に答える 2

1

'WHERE ... IN'を利用する:

WHERE Name IN ('nr1','nr2',...)

string implode ( string $glue , array $pieces );

次のように使用します。

$options = array(); //here's your choices

$sql_unique = "SELECT Categories_CategoryID, list
               FROM (
             SELECT Categories_CategoryID, GROUP_CONCAT( Topics_TopicID ) AS list
             FROM (
                SELECT *
                FROM Topics_crosstable
                ORDER BY Topics_TopicID
             )H
             GROUP BY Categories_CategoryID
                )A
                WHERE list = (
             SELECT GROUP_concat( TopicID )
             FROM Topics
             WHERE Name IN (";
$sql_unique .= implode(",",$options);
$sql_unique .= ") ORDER BY Categories_CategoryID ASC )";
于 2013-03-16T19:11:40.653 に答える
0

テーブルカテゴリー

  • 猫ID

トピックス

  • トップID
  • カテゴリー

カテゴリ : トピックス ( 1 : n )

質問: カテゴリ$xには固有のトピック セットがありますか?

最初にカテゴリのすべてのトピックの合計を取得します$x

SELECT GROUP_CONCAT(topID ORDER BY topID) topiclist
FROM Topics
WHERE category='$x'

を分解してその配列にいくつかの新しい値を追加する必要があるかもしれませんtopiclist。上記のクエリの結果が連想配列にフェッチされたと仮定しています$r

$list=explode(',',$r['topiclist']);
$list[]=$newtopicID1;
$list[]=$newtopicID2;
// etc ... or use $list += $newTopicsArray; which will ADD those two arrays
sort($list); //make it sorted again
$list=implode(',',$list);

次に、データベースに再度クエリを実行し、クエリしているカテゴリを除いてそのような組み合わせを見つけようとします:

SELECT GROUP_CONCAT(topID ORDER BY topID) topiclist
FROM Topics
WHERE category!='$x'
GROUP BY category
HAVING topiclist='$list'

次に、返されたレコードがあるかどうかを確認します。そうであれば、同じトピックを持つ別のカテゴリを見つけたことになります。そうでなければ、トピックの組み合わせは一意です。

于 2013-03-16T20:37:53.600 に答える