2014-09-22 156 views
-2

我想打印所有成员报告(抱怨),以这种形式的管理:PHP检索,而不是检索所有表行的同一行多次

发件人名称:...
报用户名: ...

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

<?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)倍一样的第一行:

  • 纳达
  • 阿里
  • 纳达
  • Ali
    ....直到$ ln

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

我的架构:

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 
+0

你忘记关闭支架您的循环,或者当你在这里复制粘贴的时候,它只是缺少? – 2014-09-22 16:29:04

+0

因为你只在循环之外调用'mysql_fetch_array($ raw_results)'...! – deceze 2014-09-22 16:29:42

+0

不,这只是错过了这里 – Najd 2014-09-22 16:30:01

回答

0

呀我没有找到查询家伙谢谢 也就是说它

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

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

-1

更改$结果[1]到$结果[$ i]于你的循环的第一道防线。

0

您并未遍历您的原始结果集。在for循环内移动$results = mysql_fetch_array($raw_results);,你应该开始看到你想要的输出。

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

最后,mysql_fetch_array语句已被弃用,所以您还应该考虑使用PHP PDO或mysqli扩展。

+0

我做了,它的工作原理是检索正确的发件人姓名,但报告的用户名称没有更改。 – Najd 2014-09-22 16:42:03

+0

您需要为ReportedUserId添加查询以包含类似'AND c.sender_name = $ SenderName'的内容。同样,如果没有看到你的底层数据库模式,很难说。但是,要重新讨论这个问题,您确实需要阅读有关连接数据库表的信息。它会使你的逻辑更简单,可能更快。换句话说,当迈克布兰特说你以糟糕的方式这样做时,他就死定了。这里是开始http://www.w3schools.com/sql/sql_join.asp的好地方。 http://www.tutorialspoint.com/sql/sql-using-joins.htm – 2014-09-22 16:53:37

+0

感谢您的链接和完整的答案。 – Najd 2014-09-22 18:43:50