2017-08-14 55 views
0

我有一個表格,其中列中的項目在邏輯上分組。我需要檢查表中是否存在項目的列表。我需要檢查確切數量的清單。用於檢查表列中值的SQL的SQL查詢

enter image description here

這是我的表結構,如果我對搜索我的名單(「瑞克」和「Max),我應該得到的組ID 2。但是,如果我只是搜索‘裏克’我不應該得到任何結果回來。

+2

您使用什麼查詢來執行搜索?你還使用什麼樣的SQL? – yanman1234

+0

爲什麼只搜索「Rick」時不會得到結果?該值在表中有一個「GroupId」。是否有額外的標準,你想申請但沒有描述? –

+0

整個目的是重新使用現有的組。如果輸入人員列表不屬於任何組,我將創建一個新組。因此,有必要確定現有的組。 – pijushcse

回答

0

您可以使用子查詢來獲取組和名稱,在使用GroupIdGROUP 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柱(您輸入的名稱應該是下令以及)

SQL Fiddle

+0

你應該考慮字符串字段的長度限制,無論是...... – hummingBird

0

在這裏你去與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 

enter image description here

http://sqlfiddle.com/#!9/5cc34/5

0

這是一個有趣的問題!

我敢肯定有一個更好的解決方案,但這裏是我的建議:

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代碼。