【问题标题】:SQL Query only retrieving one rowSQL 查询只检索一行
【发布时间】:2012-10-13 20:55:54
【问题描述】:

我有一个 php 网站,上面有一些代码,可以在用户定义一些搜索词后从数据库中提取,然后向他们展示一个包含所有信息的表格

问题是即使我从表中选择 *,我也只能返回第一行。

代码:

$result = mysql_query("SELECT trees.*     
FROM trees 
INNER JOIN price 
ON trees.ID=price.treeid  
");


$num_rows = mysql_num_rows($result);
if($num_rows == 0) {
echo "No rows retrieved";
} else {
echo $num_rows;
}

我的数据库中有 2 行:

Spruce  El Sorbeous Sprucious   Green   Green   Green   100     200
its a tree ma!  true    NULL    NULL    NULL

Mayday  el daymay   red green   white   10  4000000
GOING DOWN  true    Grey    true    false

当我在上面打印出 $num_rows 时,它只有一个。 当我打印出下面的表格时,只有一行:

echo '<table border = 0 cellpadding=0 >';
echo '<tr>';
echo '<td><b><u>Name</b></u></td>
<td><b><u>Latin Name</b></u></td>
<td><b><u>Primary Color</b></u></td>
<td><b><u>Secondary Color</b></u></td>
<td><b><u>Fall Color</b></u></td>
<td><b><u>Trunk Color</b></u></td>';

echo '<td><b><u>Description</b></u></td>
<td><b><u>Height</b></u></td>
<td><b><u>Spread</b></u></td>
<td><b><u>Drought Resistant?</b></u></td>
<td><b><u>Flowering?</b></u></td>
<td><b><u>Fruit Producing?</b></u></td>';

echo '</tr>';

while ($row = mysql_fetch_assoc($result)) {
     echo '<tr>';
     echo '<td>';
     echo $row['name'];
     echo '</td>';
     echo '<td>';
     echo $row['latinname'];
     echo '</td>';
     echo '<td>';
     echo $row['primarycolor'];
     echo '</td>';
     echo '<td>';
     echo $row['secondarycolor'];
     echo '</td>';
     echo '<td>';
     echo $row['fallcolor'];
     echo '</td>';
     echo '<td>';
     echo $row['trunkcolor'];
     echo '</td>';
     echo '<td>';
     echo $row['description'];
     echo '</td>';
     echo '<td>';
     echo $row['height'];
     echo '</td>';
     echo '<td>';
     echo $row['spread'];
     echo '</td>';
     echo '<td>';
     echo $row['droughtresistant'];
     echo '</td>';
     echo '<td>';
     echo $row['flowering'];
     echo '</td>';
     echo '<td>';
     echo $row['fruitproducing'];
     echo '</td>';

     echo '</tr>';

}
echo '<table>';

【问题讨论】:

  • 第二个代码块是数据库数据。但我确实注意到我将参考键放入价格表而不是树表中。我的外键倒了!这可能会或可能不会解决我的问题?
  • 在提出问题之前谁知道它与问题无关?不是我 。其他人似乎在我的设置中发现了有趣的问题,而您只是抱怨。其他答案让我得到了答案。
  • 好吧,我会编辑它并在我有时间的时候提出答案。这个问题很难在这里记录,因为我的表结构是错误的,阅读人们的回复让我检查了结构是否有正确的外键约束,这是我遗漏的,在实施时,它解决了我的问题。所以我不知道如何正确记录这种情况。
  • 按照您的建议,伪造问题没有意义。最初的问题成立,问题已经解决。

标签: php sql database web


【解决方案1】:

INNER JOIN 将仅返回两个表中都具有 NOT NULL 值的值。您可能正在加入具有 NULL 值的东西。请改用 LEFT 或 RIGHT 连接!

【讨论】:

  • 我删除了连接,我得到了两行。现在说表a中的多行引用表b中的1行,我想显示所有行,以及表b中的重复数据,我该怎么做?我认为连接会为表 a 中引用它的每一行复制表 b 中的数据?
  • @jordan.peoples 如果树表中存在信息并且您正在加入另一个表,可能有更多信息,请使用 LEFT JOIN。和以前一样,但是用 LEFT 代替了 INNER
【解决方案2】:

由于 PRICE 表中没有数据示例,我猜测只连接了一行。

问题仍然存在,你为什么要做那个 JOIN?您没有从 PRICE 表中收集任何数据,那有什么意义呢。
顺便说一句,数据中的ID在哪里?

【讨论】:

  • 你是对的,也许我应该添加更多代码,我只是不想压倒任何人。表 a 的行引用了表 b 中的行(价格),表 a 中的多行可以引用表 b 中的同一行。所以最终我需要在 html 表中显示两个表中的所有数据。
  • 选择这个作为正确答案,因为我错过了我的 ID 外键约束,这张海报让我想到了它并再次检查我的数据库结构
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多