php - MYSQL:列出其值 = "Yes"的所有列名

标签 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; ?>

有人可以告诉我哪里出错了吗? 提前致谢。

最佳答案

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 的所有列号都是肯定的,您可以简单地执行以下操作:

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

关于php - MYSQL:列出其值 = "Yes"的所有列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55087457/

相关文章:

php - 用于邮寄的最佳所见即所得编辑器(或用于邮寄的最佳使用方式)

javascript - 使用 jQuery 和 PHP 从 MySQL 数据库查询的 JSON 数据填充 HTML 选择字段

mysql - 插入选择查询

mysql - 多张 table 或一张水平分区的大 table

php - 如何在 laravel 的闭包函数中调用 laravel 验证规则?

PHP GD : How to get dimensions of image resource in memory without writing to file?

php - WordPress 获取 pdf 附加链接到帖子

php - mysql/laravel组查询结果

mysql - 如何在 mysql 中正确执行 LOOP

mysql - SQL - 如果第一个数字以数字 '9' 开头,则将其删除