簡體   English   中英

SQL-在單個查詢中計算多個列和JOIN

[英]SQL - Count Multiple columns and JOIN in a single query

我試圖從單行中獲取除“ N / A”以外的其他值(AAA-ZZZ)以與基本信息一起顯示的字段數。 我有2個查詢,分別可作為SQL命令找到,但我希望將它們合並在一起以在foreach語句中工作。

表結構:

ID  UserID  Date    Assignment  AAA BBB CCC DDD
1   1   1/27/2014   Test    5.25    N/A 4   N/A
2   4   1/27/2014   Test2   N/A N/A 3.5 2.75
3   1   1/29/2014   Test3   1.25    N/A N/A 4.5

例如,使用上述信息,計數將是:

ID 1, Count = 3
ID 2, Count = 2
ID 3, Count = 1

PHP表代碼:

    foreach ($pdo->query($sql) as $row) {
         echo '<tr>';
         echo '<td>'. $row['Date'] . '</td>';
         echo '<td>'. $row['UserName'] . '</td>';
         echo '<td>'. $row['Assignment'] . '</td>';
         echo '<td>'. $row['Count'] . '</td>';
         echo '</tr>';
         }
}

檢索查詢:

$sql = "SELECT db_log.ID, CONCAT(db_users.FName, ' ', db_users.LName) AS UserName, db_log.Date, db_log.Assignment
FROM `db_log` 
INNER JOIN `db_users` ON 
db_log.UserID=db_users.ID 
ORDER BY `ID` DESC LIMIT 0,20";

替代查詢:

$sql = "SELECT db_log.ID, CONCAT(db_users.FName, ' ', db_users.LName) AS UserName, db_log.Date, db_log.Assignment
FROM `db_log`, `db_users` 
WHERE db_log.UserID=db_users.ID 
ORDER BY `ID` DESC LIMIT 0,20";

計數查詢:請注意, ID = 1應該是第一個查詢的ID:

SELECT COUNT(AAA) FROM (
SELECT `AAA` FROM `db_log` WHERE `AAA` <> 'N/A' AND `ID`=1 UNION ALL
SELECT `BBB` FROM `db_log` WHERE `BBB` <> 'N/A' AND `ID`=1 UNION ALL
SELECT `CCC` FROM `db_log` WHERE `CCC` <> 'N/A' AND `ID`=1 UNION ALL
SELECT `DDD` FROM `db_log` WHERE `DDD` <> 'N/A' AND `ID`=1 UNION ALL
SELECT `EEE` FROM `db_log` WHERE `EEE` <> 'N/A' AND `ID`=1) AS A

我已經研究了聯接和其他變通方法,但是很不幸。 在此先感謝您的幫助 :)

以下內容將使您在單個查詢中獲得非N / A字段的數量。

   SELECT id, CONCAT(db_users.FName, ' ', db_users.LName) AS UserName,
    (IF (aaa = 'N/A', 0, 1) + 
     IF (bbb = 'N/A', 0, 1) + 
     IF (ccc = 'N/A', 0, 1) + 
     IF (ddd = 'N/A', 0, 1) ) AS count
    FROM db_log
    JOIN db_users on db_log.userId = db_users.userId

我在這里設置了一個SqlFiddle來玩這個: http ://sqlfiddle.com/#!2/d6990/5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM