【问题标题】:Loops on SQL SelectSQL Select 上的循环
【发布时间】:2014-01-11 12:31:22
【问题描述】:

我有一个问题,我的 PHP 页面出现循环。

我只在我的数据库中选择了 2 条这样的信息:

$sqlins="SELECT hardware.name, rd.cmd
FROM hardware, rd
WHERE hardware.name LIKE 'Boomee'
AND rd.cmd LIKE 'putty'";
$toto = mysql_query($sqlins);

这是我的请求的一个例子。 当我像这样使用循环时:

while ($data=mysql_fetch_array($toto)) {
    echo $data[1];
    echo "<br>";
}

我不明白为什么我的输出在同一行中多次发送给我。 在我的数据库中,我有 30 个条目。我想把它们都显示出来……但是代码给我发了 2700!

我的真实脚本比这要复杂一些,我在SQL Query 中使用preg_replaceimplode 等,以及更多“AND LIKE”。

我希望你能帮助我。请帮助我。

【问题讨论】:

  • 您的 SQL 查询可能返回 2 个表的交叉连接(笛卡尔积)。你需要在一个互助领域加入他们。
  • 谢谢你,@Joe Taras 得到了最好的答案,我编辑了我的查询,现在它可以工作了。

标签: php mysql loops while-loop


【解决方案1】:

这个查询:

SELECT hardware.name, rd.cmd
FROM hardware, rd
WHERE hardware.name LIKE 'Boomee'
AND rd.cmd LIKE 'putty'

执行笛卡尔积。

如果您不想执行此操作,则必须将您的 2 个表硬件和 rd 关联起来。

我不知道硬件是否是 rd 的父级,反之亦然。但是如果存在链接两个表的字段,则在 WHERE 子句中添加此条件。

或者(建议)您以这种方式使用显式 JOIN 重写查询:

SELECT hardware.name, rd.cmd
FROM hardware
INNER JOIN rd
ON hardware.field = rd.field
WHERE hardware.name LIKE 'Boomee'
AND rd.cmd LIKE 'putty'

【讨论】:

    【解决方案2】:

    是的,我在硬件和 rd 中链接了 2 个字段。

    第一个是“hardware.id”,第二个是“rd.hardware_id”。

    而且你的方法效果很好。

    我已经像这样更改了我的查询,因为在使用它之前我必须了解什么是 INNER JOIN 和 ON。

    SELECT hardware.name, rd.cmd
    FROM hardware, rd
    WHERE hardware.id=rd.hardware_id
    AND hardware.name LIKE 'Boomee'
    AND rd.cmd LIKE 'putty'
    

    非常感谢你。同样的,它会帮助我追求表格之间的联系。

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2015-03-02
      • 2018-08-22
      • 2021-03-31
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多