PHP多次检索同一行,而不是检索所有表的行

时间:2014-09-22 16:23:20

标签: php html mysql loops data-retrieval

我正试图以这种形式向管理员打印所有成员报告(抱怨):

发件人姓名:...
报告的用户名:...

首先,我想直接从投诉表中选择每个发件人名称(使用for循环),然后找到匹配的报告用户名并以这种方式打印所有报告。 请注意,我没有在同一个表中保存发件人名称和报告的用户名,因此我需要进行mysql join才能找到报告的用户名。

<?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>

我从这段代码得到的输出是表格投诉的第一行打印多次($ ln)次,如:

  • Nada
  • 阿里
  • Nada
  • 阿里
    ....直到$ ln

为什么它不会进入下一行虽然我使用循环? 我尝试了数据库中的查询,它的工作原理,所以问题不是来自db。 如果需要,我准备写更多细节:)

我的架构:

Member(m_id, m_name, ...etc)
Ride(r_id, p_id ....etc) *p_id refers to m_id
Complaint(c_id, d_id ..etc)*d_id refers to m_id
the idea is member reports member in a ride

3 个答案:

答案 0 :(得分:0)

您没有迭代原始结果集。将$results = mysql_fetch_array($raw_results);移到for循环内部,您应该开始看到所需的输出。

但是,我想说,您可能希望使用JOIN语句将一些逻辑卸载到数据库中。很难说没有看到你的底层数据库模式,但是当一个人能够检索你需要的数据时,通常不是一个好主意。

最后,不推荐使用mysql_fetch_array语句,因此您还应该考虑使用PHP PDO或mysqli扩展。

答案 1 :(得分:0)

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
 "); 

现在我需要知道如何使用循环来解决它

答案 2 :(得分:-1)

在循环的第一行将$ results [1]更改为$ results [$ i]。