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
  • 类别

类别:主题(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 回答