2014-09-22 32 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