【问题标题】:Continue MYSQL output in PHP在 PHP 中继续 MYSQL 输出
【发布时间】:2013-01-03 16:14:47
【问题描述】:

我在数据库上有一个选择,如下所示:

$result = mysql_query("                 
SELECT dat_eb_registrants.id, dat_eb_registrants.first_name,  
    dat_eb_registrants.last_name, dat_eb_registrants.email, dat_eb_registrants.comment,   
    dat_eb_registrants.amount, dat_eb_registrants.published,   
    dat_eb_registrants.transaction_id, dat_eb_registrants.register_date,   
    dat_eb_field_values.field_value   
FROM dat_eb_registrants LEFT JOIN dat_eb_field_values 
  ON dat_eb_registrants.id=dat_eb_field_values.registrant_id
WHERE dat_eb_field_values.field_id='53' AND `event_id` >= 20 AND `event_id` <= 25
ORDER BY $sort $ascdsc
");

它会显示在一个 html 表格中,如下所示: 回声“ ID 名 姓 电子邮件 评论 价值1 价值2 价值3 ";

while ($row = mysql_fetch_row($result)) {

echo "<tr>";
echo "<td>" . $row[0] . "</td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
echo "<td>" . $row[3] . "</td>";
echo "<td>" . $row[4] . "</td>";

echo "<td>" . $row[9] . "</td>";

echo "<td>" . $row[?] . "</td>";
echo "<td>" . $row[?] . "</td>";
echo "</tr>";
echo "</table>";

}

现在,前 4 个值已正确显示,就像第 5 个一样,但是第 6 个和第 7 个呢?它们没有被 MYSQL 调用,因为 dat_eb_field_values.field_value 只被调用一次,并且被赋值为 WHERE dat_eb_field_values.field_id='53

如何使用数据库中的其他值完成表格?

提前致谢,劳伦特

【问题讨论】:

  • 调用 'dat_eb_field_values.field_id='53' ORevent_id >= 20 '而不是使用 'AND' 会有所帮助。还是应该在这里放一些表格数据让我们更了解你??
  • 好像忘记了,我编辑了!
  • event_id >= 20 与字段值无关,只是用来排序的。
  • 请注意,mysql_xxx() 函数已从 PHP 中正式弃用。多年来,它们一直被认为过时且不安全,但现在使用它们绝对是不好的做法。如果可能,您应该改用 mysqli_xxx() 函数或 PDO 库。

标签: php mysql join fetch


【解决方案1】:

如果我理解正确,您正在尝试为每个人加载多个值。这些值位于单独表中的多行中。

您需要使用GROUP BY 子句。 JOIN registrants 表和 values 表就像你现在做的一样,在 WHERE 子句之后,GROUP BY registrant 的 id。当然,不要将 WHERE 限制为某个值的 ID,因为那样您将不会获得任何其他值。最后,您可以使用GROUP_CONCAT() 将所有值行获取到单个结果值中,由, 分隔。您可以将其更改为由&lt;/td&gt;&lt;td&gt; 分隔,以便更容易放入您的表格中。

SELECT registrants.name, GROUP_CONCAT(values.value SEPARATOR '</td><td>')
FROM registrants
LEFT JOIN values USING (registrant_id)
WHERE ...
GROUP BY registrant_id

【讨论】:

  • 只是“GROUP BY dat_eb_registrants.id”吗?
  • 并删除“dat_eb_field_values.field_id='53'”
  • 是的,并通过GROUP_CONCAT 事物更改SELECT 子句中的值。这样,您会将所有值行组合成 1 个结果(请参阅我更新的答案)。
  • 好的,现在这就是我所拥有的:SELECT dat_eb_registrants.id, dat_eb_registrants.first_name, dat_eb_registrants.last_name, dat_eb_registrants.email, dat_eb_registrants.comment, dat_eb_registrants.amount, dat_eb_registrants.published, dat_eb_registrants.transaction_id, dat_eb_registrants.register_date, GROUP_CONCAT(dat_eb_field_values.field_value SEPARATOR '') FROM dat_eb_registrants 左连接 dat_eb_field_values ON dat_eb_registrants.id=dat_eb_field_values.registrant_id 哪里 event_id >= $33@4 AND @98765排序 $ascdsc GROUP BY dat_eb_registrants.id ");
  • 仍然使用:while ($row = mysql_fetch_row($result)) 和 echo "" 来调用它。 $行[9] 。 "";
【解决方案2】:

Voitek Zylinski 的回答是我认为最好的方法。但你可以为每个尝试一个。

while ($row = mysql_fetch_row($result))
{
    echo "<tr>";
    foreach($row as $row_item)
    {
        echo "<td>".$row_item."</td>"
    }
    echo "</tr>";
}

不管有多少字段,这都会起作用

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签