我有一张像这样的桌子:
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; ?>
请有人能告诉我我要去哪里错吗? 预先感谢。
答案 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;