PHP多次检索同一行,而不是检索表中的所有行
我正在尝试以以下形式打印所有成员向管理员投诉的报告: 发件人名称:。。。 报告的用户名: 首先,我想使用for循环直接从投诉表中选择每个发件人名称,然后找到匹配的报告用户名,并以这种方式打印所有报告。 请注意,我没有将发送者名称和报告的用户名保存在同一个表中,因此我需要执行mysql join以查找报告的用户名PHP多次检索同一行,而不是检索表中的所有行,php,html,mysql,loops,data-retrieval,Php,Html,Mysql,Loops,Data Retrieval,我正在尝试以以下形式打印所有成员向管理员投诉的报告: 发件人名称:。。。 报告的用户名: 首先,我想使用for循环直接从投诉表中选择每个发件人名称,然后找到匹配的报告用户名,并以这种方式打印所有报告。 请注意,我没有将发送者名称和报告的用户名保存在同一个表中,因此我需要执行mysql join以查找报告的用户名 <?php $raw_results = mysql_query("SELECT * FROM complaint "); $ln = mysql_num_rows($raw
<?php
$raw_results = mysql_query("SELECT * FROM complaint ");
$ln = mysql_num_rows($raw_results);
if($ln > 0){
$results = array();
$results = mysql_fetch_array($raw_results);
for($i=0;$i<$ln;$i++){
$SenderName = mysql_query("SELECT m_name FROM member WHERE (`m_id`LIKE '".$results[1]."') ");
$fetchA = mysql_fetch_array( $SenderName, MYSQL_ASSOC);
$ReportedUserId = mysql_query("SELECT r.d_id FROM ride r, complaint c WHERE r.r_id= c.r_id");
$fetchB = mysql_fetch_array($ReportedUserId , MYSQL_ASSOC);
//Afer finding ID I use it to select name
$dname = mysql_query("SELECT m_name FROM member WHERE (`m_id` LIKE '%".$fetchB['d_id']."%') ");
$fetchDname = mysql_fetch_array($dname, MYSQL_ASSOC);?>
<ul data-role="listview" data-divider-theme="d" data-inset="false">
<li data-role="list-divider" role="heading">
<?php echo 'From:'; ?>
<?php echo $fetchA['m_name']; ?></li>
<li data-theme="c" >
<?php echo 'Reported user Name: '; ?>
<?php echo $fetchDname['m_name']; ?>
</li>
</ul>
在循环的第一行中将$results[1]更改为$results[$i]。您没有在原始结果集上迭代。Move$results=mysql\u fetch\u array$raw\u results;在for循环内部,您应该开始看到所需的输出 然而,我想说的是,您可能希望通过使用JOIN语句将一些逻辑卸载到数据库中。很难说没有看到您的底层数据库模式,但是当一个数据库查询能够检索到您需要的数据时,使用多个数据库查询通常不是一个好主意
最后,mysql_fetch_数组语句已被弃用,因此您还应该研究PHP PDO或mysqli扩展的使用。Awww我确实找到了查询,谢谢 就这样
$name = mysql_query("SELECT m.m_name
FROM member m
INNER JOIN ride r
on m.m_id = r.d_id
INNER JOIN complaint c
on r.r_id = c.r_id
");
现在我需要知道如何使用循环遍历它您是否忘记关闭for循环的括号,或者在复制粘贴到此处时丢失了它?因为您只在循环外部调用mysql_fetch_array$raw_results。。。!?不,只是错过了这里,你真的做得很糟糕。我的猜测是,通过将投诉表和乘坐表连接到您的成员表,您可以通过一个查询获得所需的所有数据。暂时忘掉PHP代码,然后后退一步查看查询。@Najd如果您编辑问题以更好地显示表架构和示例数据,我认为您将是一个更好的查询建议,可以消除所有嵌套的无意义循环。我这样做了,它可以检索正确的发件人名称,但报告的用户名没有更改。您需要在查询中添加ReportedUserId,以包括和c.sender\u name=$SenderName之类的内容。同样,如果看不到您的底层数据库模式,就很难确定。不过,要重新讨论这个问题,您确实需要阅读有关连接数据库表的内容。这将使您的逻辑更简单,可能更快。换句话说,迈克·布兰特(Mike Brant)说你做这件事的方式很糟糕,他对此一窍不通。这里有一些好的起点。谢谢你的链接和完整的答案。
$name = mysql_query("SELECT m.m_name
FROM member m
INNER JOIN ride r
on m.m_id = r.d_id
INNER JOIN complaint c
on r.r_id = c.r_id
");