我有一个表格,其中列中的项目在逻辑上分组。我需要检查表中是否存在项目的列表。我需要检查确切数量的清单。用于检查表列中值的SQL的SQL查询
这是我的表结构,如果我对搜索我的名单(“瑞克”和“Max),我应该得到的组ID 2。但是,如果我只是搜索‘里克’我不应该得到任何结果回来。
我有一个表格,其中列中的项目在逻辑上分组。我需要检查表中是否存在项目的列表。我需要检查确切数量的清单。用于检查表列中值的SQL的SQL查询
这是我的表结构,如果我对搜索我的名单(“瑞克”和“Max),我应该得到的组ID 2。但是,如果我只是搜索‘里克’我不应该得到任何结果回来。
您可以使用子查询来获取组和名称,在使用GroupId
GROUP BY
,组名逗号分隔(有序),然后检查您输入反对。
对于例如,在MySQL中。
SELECT * FROM (SELECT GroupId, GROUP_CONCAT(Name order by Name) AS "ConcNames"
FROM my_table
GROUP BY GroupId) subQueryTable WHERE subQueryTable.ConcNames= 'Max,Rick';
会给你:
------------------
GroupId ConcNames
2 Max,Rick
然后检查你的参数对ConcNames
柱(您输入的名称应该是下令以及)
你应该考虑字符串字段的长度限制,无论是...... – hummingBird
在这里你去与MySQL :
SELECT groupID,
count(*),
(SELECT group_concat(NAME separator ' and ')
FROM TABLE_NAME table2
WHERE table1.groupID=table2.groupID) RESULT
FROM TABLE_NAME table1
GROUP BY groupID
这是一个有趣的问题!
我敢肯定有一个更好的解决方案,但这里是我的建议:
SELECT DISTINCT GroupID FROM test_table WHERE
(name='Rick' OR name='Max') #... You could add more 'OR's here
AND
(SELECT COUNT(name) FROM test_table WHERE GroupID=(SELECT DISTINCT GroupID FROM test_table WHERE name='Rick')) # This only needs one name from the list
=
(SELECT COUNT(name) FROM test_table WHERE (name='Rick' or name='Max')) # The same WHERE clause as the first one
您还需要确保返回只有一行。
至于如何使用这样的一个例子,如果你在PHP工作,赐名数组来检查和MySQL连接$骗子,你可以这样做:
<?php
$names = array('Rick', 'Max'); // The names to check
$whereClause = '';
$index = 0;
foreach($names as $name) {
if($index != 0) {
$whereClause .= ' OR ';
}
$whereClause .= "name='{$name}'";
$index++;
}
$query = "SELECT DISTINCT GroupID FROM test_table WHERE
({$whereClause})
AND
(SELECT COUNT(name) FROM test_table WHERE GroupID=(SELECT DISTINCT GroupID FROM test_table WHERE name='{$names[0]}'))
=
(SELECT COUNT(name) FROM test_table WHERE ({$whereClause}))";
$results = mysqli_query($con, $query);
$is_group = true;
$group_number = -1;
$n_groups = 0;
while($row = mysqli_fetch_assoc($results)) {
$n_groups++;
if($n_groups > 1) {
$is_group = false;
}
$group_number = intval($row['GroupID']);
}
// The group number is now stored in $group_number, provided that $is_group == true.
?>
希望我帮助!我在我自己的MySQL数据库中验证了SQL代码,但没有验证PHP代码。
您使用什么查询来执行搜索?你还使用什么样的SQL? – yanman1234
为什么只搜索“Rick”时不会得到结果?该值在表中有一个“GroupId”。是否有额外的标准,你想申请但没有描述? –
整个目的是重新使用现有的组。如果输入人员列表不属于任何组,我将创建一个新组。因此,有必要确定现有的组。 – pijushcse