【问题标题】:UNION query works in mysql but doesn't work the same in phpUNION 查询在 mysql 中有效,但在 php 中不一样
【发布时间】:2014-03-05 13:44:00
【问题描述】:

当我在 mysql 中运行此查询时,它会正确返回所有请求的结果:

SELECT row_id FROM table1 WHERE status = n 
UNION ALL 
SELECT row_id FROM table2 WHERE status = n 
UNION ALL 
SELECT row_id FROM table3 WHERE status = n

但是,当我从 PHP 运行它时,它只返回一条记录,即满足请求条件的第一行。

$query = mysqli_query($link, "SELECT row_id FROM table1 WHERE status = n 
UNION ALL 
SELECT row_id FROM table2 WHERE status = n 
UNION ALL 
SELECT row_id FROM table3 WHERE status = n");

print_r(mysqli_fetch_array($query));

所以print_r 显示以下内容:Array ( [0] => 1 [row_id] => 2580 ),其中 2580 是 table1 中满足请求条件的行的 id

如何让它返回完整的结果数组?

【问题讨论】:

  • 你的 php 代码中是否有一个循环来读取所有值?
  • 你能不能只用“UNION”而不用“UNION ALL”试试,而且你确定另外两个表有数据吗?
  • stackoverflow.com/questions/14456529/… - 这可能会有所帮助
  • 我遇到了类似的问题,最好的方法是回显查询,它为我确定了错误。基本上 $query 是空的,因为它的格式不正确,因为它使用了多个 ' '。

标签: php mysql sql


【解决方案1】:

您可以尝试循环打印数据,例如:

$query = mysqli_query($link, "SELECT row_id FROM table1 WHERE status = n 
UNION ALL 
SELECT row_id FROM table2 WHERE status = n 
UNION ALL 
SELECT row_id FROM table3 WHERE status = n");

while($row = mysqli_fetch_array($query)){
    print_r($row);
}

简单地 mysqli_fetch_array 只返回循环中的当前行。您需要遍历它以获取所有结果。

【讨论】:

  • 我一直都有这个循环的结果,但我一定是犯了一个错误,它没有解决,这就是我开始困惑的时候。
【解决方案2】:
  1. 我从来不知道WHERE status = n 是有效的SQL。不应该是WHERE status = 'n'
  2. 尝试像这样循环您的mysqli_fetch_array()

while($row = mysqli_fetch_array($query)){ print_r($row); }

【讨论】:

  • 这是完全有效的 SQL,因为n 可以是列名;但不知何故,我怀疑它被用作占位符。
  • @eggyal 考虑到 OP 的第一个声明 When I run this query in mysql 那么可以安全地假设 n 是列名吗?我可能只是缺乏经验,但这只有在他们执行JOIN 时才有意义
  • 我同意它可能是一个占位符,很可能是一个整数。引号只需要表示字符串,所以WHERE column=2 非常好。
  • 是的,n 可以是一个列名,即使没有JOIN(无论它是在 MySQL 中运行还是使用某些 API):请参阅,例如,sqlfiddle
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多