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代码可能有问题。您不能像这样选择列的名称。