Php MYSQL:列出其值为“=”的所有列名;是”;

Php MYSQL:列出其值为“=”的所有列名;是”;,php,mysql,Php,Mysql,我有一张这样的桌子: User_Id Column1 Column2 Column3 1 Yes No Yes 2 我想使用mysql查询列出所有与用户_Id“1”匹配且值为“Yes”的列名(超过3个) 我得到一个错误: Trying to get property 'num_rows' of non-object 以下是我尝试过的: <?php $myStats = $mysqli->query("SELE

我有一张这样的桌子:

User_Id    Column1    Column2    Column3
1          Yes         No         Yes
2 
我想使用mysql查询列出所有与用户_Id“1”匹配且值为“Yes”的列名(超过3个)

我得到一个错误:

Trying to get property 'num_rows' of non-object 
以下是我尝试过的:

<?php $myStats = $mysqli->query("SELECT COLUMN_NAME FROM user_services.columns WHERE myColumn = 'Yes'");
    if ($myStats->num_rows > 0) {
    // output data of each row
    while($row = $myStats->fetch_assoc()) {
    $rows[] = $row; }

    return $rows; ?>

这里的
CONCAT_WS
功能非常有用:

SELECT CONCAT_WS(',', IF(Column1='Yes', 'Column1', NULL),
                      IF(Column2='Yes', 'Column2', NULL),
                      IF(Column3='Yes', 'Column3', NULL)) AS columns
FROM user_services.columns
WHERE User_Id = 1;
如果您有超过3列,那么您可以在上面的
CONCAT\WS
call中添加更多的术语。您的问题主要是SQL问题,所以我不会添加任何PHP代码

请注意,如果列字符串跨行而不是跨列分布,那么您的设计可能会更好。例如,考虑下面的备选方案:

User_Id | number | val
1       | 1      | Yes
1       | 2      | No
1       | 3      | Yes
然后,如果您想要用户1的所有列号都是“是”,您可以简单地执行以下操作:

SELECT
    User_Id,
    GROUP_CONCAT(number ORDER BY number) columns
FROM yourTable
WHERE
    User_Id = 1
GROUP BY
    User_Id;

谢谢,但我不确定我这里的代码是否正确,'if($myStats->num_rows>0){,因为我仍然会收到与以前相同的错误消息。有什么想法吗?@MikeHenry我认为我的两个查询都没有错,但您的PHP代码可能有问题。您不能像这样选择列的名称。