MYSQL:列出所有列名称,其中其值=“ Yes”

时间:2019-03-10 12:03:24

标签: php mysql

我有一张像这样的桌子:

User_Id    Column1    Column2    Column3
1          Yes         No         Yes
2 

我想使用mysql查询列出所有与User_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; ?>

请有人能告诉我我要去哪里错吗? 预先感谢。

1 个答案:

答案 0 :(得分:1)

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调用中添加更多术语。您的问题似乎主要是SQL的问题,因此我不会添加任何PHP代码。

请注意,如果列字符串分散在行而不是列中,则设计可能会更好。例如,考虑以下替代方法:

User_Id | number | val
1       | 1      | Yes
1       | 2      | No
1       | 3      | Yes

然后,如果您希望用户1的所有列号都是“ yes”,则只需执行以下操作:

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