我有一個表格,其中列中的項目在邏輯上分組。我需要檢查表中是否存在項目的列表。我需要檢查確切數量的清單。用於檢查表列中值的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