2017-10-15 75 views
1
talb1       tabl2 
[id - col1]    [tid - col1] 
[1 - aa1]    [1  -  c] 
[2 - ba2]    [1  -  b] 
[3 - ca3]    [1  -  a] 
[4 - da4]    [1  -  d] 
           [2  -  c] 
           [2  -  a] 
           [2  -  b] 
           [3  -  b] 
           [3  -  a] 
           [4  -  a] 

最高匹配訂單價值在IN子句

$query = " 
SELECT a.id 
FROM a.tabl1 
LEFT JOIN tabl2 b ON a.id = b.tid 
WHERE b.col1 IN ('a', 'b', 'c', 'd') 
GROUP BY a.id 
"; 

我試圖獲得最高ID S中IN Clause內匹配,我得到的值,但他們從未下令,

我想最高的ID例如具有

01的最高匹配

對它們進行排序

ID[4] = match['a', 'b', 'c', 'd']; 
ID[2] = match['a', 'b', 'c']; 
ID[3] = match['a', 'b']; 
ID[1] = match['a']; 

所以我嘗試

ORDER BY COUNT(b.col1) DESC但它顯然不會做任何事情,因爲我希望它發生,究竟如何訂購這樣的查詢?

注意:如果我選擇a, b, c只有內部IN Clause我得到有序值,但如果選擇a, b, c, d(所有字母)我得到的隨機值。

+2

這'ORDER BY COUNT(b.col1)DESC'應該做類似的標準,我不知道如果你可以包含一些樣本數據,它會更好 –

+0

@MKhalidJunaid添加了一個樣本表 – AXAI

回答

1

您需要GROUP BY爲了使用ORDER BY COUNT(...)

SELECT a.id , COUNT(b.col1) AS cnt 
FROM tabl1 a 
LEFT JOIN tabl2 b 
    ON a.id = b.tid 
AND b.col1 IN ('a', 'b', 'c', 'd') 
GROUP BY a.id 
ORDER BY cnt DESC; 

Rextester Demo

+0

是的,我現在有'GROUP BY'添加它,有時查詢自動正常工作,但如果我選擇了所有IN查詢中的'a,b,c,d',i t開始隨機。如果'IN'具有'a,b,c',它按預期工作,但'a,b,c,d'完全是錯誤的。 – AXAI

+0

@AXAI請立即檢查 – lad2025

+0

我想過這個解決方案,但它是唯一可能的解決方案嗎? – AXAI