我正在尝试确定与某个类别相关的主题组合是否唯一。在向类别添加主题时完成此操作。使用此查询检查唯一性:
$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循环吗?
类似于(添加的主题数量; nr ++){OR Name =',$ inserted_topicName'}
答案 0 :(得分: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 )";
答案 1 :(得分:0)
表类别
表主题
分类:主题(1:n)
问题:类别$x
是否有唯一的主题集?
首先获得类别$x
SELECT GROUP_CONCAT(topID ORDER BY topID) topiclist
FROM Topics
WHERE category='$x'
您可能需要展开{{1}}并向该数组添加一些新值,我假设将上述查询的结果提取到关联数组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);
然后检查是否有返回的记录。如果是,那么您找到了具有相同主题的另一个类别,如果没有,则主题组合是唯一的