Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL-计算多个列并在单个查询中联接_Php_Mysql_Sql_Join_Count - Fatal编程技术网

Php SQL-计算多个列并在单个查询中联接

Php SQL-计算多个列并在单个查询中联接,php,mysql,sql,join,count,Php,Mysql,Sql,Join,Count,我试图从一行中获取AAA-ZZZ字段的计数,这些字段的值不是“N/a”,并与基本信息一起显示。我有两个查询分别作为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/

我试图从一行中获取AAA-ZZZ字段的计数,这些字段的值不是“N/a”,并与基本信息一起显示。我有两个查询分别作为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`, `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

我在这里设置了一个SQLFIDLE来处理这个问题:

您需要一个来创建一个。你可以用PHP来做这件事。:@ChristianMark如果你用PHP来做,你会建议什么路线?我知道您可以取消设置所有“N/A”值,但如何计算所有其他匹配列?工作非常出色,非常感谢!一个真正的SQL专家-如果我有代表,我会立刻投票给你:
   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