2011-12-12 116 views
0

问题标题不是很清楚,所以让我解释一下。如何在一个循环内的php mysql中查询结果的子查询

我试图使该得到的所有行项目为一个特定的顺序,所以我使用一个循环来获取所有订单的行项目表不过我行项目表结构如下

|Id (pk)| Order_Id (fk) | Line_Id | Item_Id (fk) | Item_Qty | Item_Price | Line_Total| 
|1  | 1    | 1  | 1   | 1  | 25   |25   | 
|2  | 1    | 2  | 2   | 3  | 6   |18   | 

我现在想在这个循环中进行查询,从items表中获取item_number,这样它不仅可以显示有点模糊的item_id。

我的主要问题是我似乎无法弄清楚如何让查询知道在SQL语句的WHERE子句中使用哪个item_id。以及如何让循环内部每次运行父循环/查询时都不运行,即3行项目,因此子查询/循环将运行3次而不是一次,因为有3个值在它正在循环的数组中。

$id = $_GET['id']; 

$query = "SELECT * "; 
$query.= "FROM quotes "; 
$query.= "WHERE id = {$id}"; 

$confirmed_query = confirm_query($query); 
    if (!$confirmed_query) { 
     echo "Query Failed".mysql_error(); 
     } 

$query = mysql_query($confirmed_query); 

$query_result = mysql_fetch_assoc($query); 

echo "<table border=\"1\"><tr>"; 

foreach ($query_result as $key => $value) { 
    echo "<th>".ucwords(str_replace("_", " ", $key))."</th>"; 
    } 

echo "</tr><tr>"; 

foreach ($query_result as $key => $value) { 
    echo "<td>{$value}</td>"; 
    } 

echo "</tr></table><br /><br /><table border=\"1\"<tr>"; 

$query = "SELECT * "; 
$query.= "FROM quote_details "; 
$query.= "WHERE quote_id = {$id}"; 

$confirmed_query = confirm_query($query); 
    if (!$confirmed_query) { 
     echo "Query Failed".mysql_error(); 
     } 

$query = mysql_query($confirmed_query); 
$header_written = false; 
echo "</tr><tr>"; 
while ($query_result = mysql_fetch_assoc($query)) { 
    while ($header_written == false) { 
     foreach ($query_result as $key => $value) { 
      echo "<th>".ucwords(str_replace("_", " ", $key))."</th>"; 
      $header_written = true; 
      } 
     } 
    echo "</tr><tr>"; 

    //problem starts here 

    foreach ($query_result as $key => $value) { 

     $item_query = "SELECT item_number "; 
     $item_query.= "FROM items "; 
     $key_item = $key; 
     $item_query.= "WHERE id = {$key_item}"; 

     $confirmed_query = confirm_query($item_query); 
      if (!$confirmed_query) { 
       echo "Query Failed".mysql_error(); 
       } 

     $item_query = mysql_query($confirmed_query); 
     while ($item_number = mysql_fetch_assoc($item_query)) { 
      foreach ($item_number as $item) { 
       echo $item; 
      } 
     } 

     echo "<td>{$value}</td>"; 
     } 
    } 
echo "</tr></table>"; 

请不要介意显示html与sql查询混在一起。

任何关于如何解决这个问题的帮助将会很棒我似乎无法找到一个角度来开始工作。

谢谢。

+0

好吧我已经取得了一些进展,通过更改SQL语句使用它现在正在做的$值。但是我仍然无法从多次输出结果中获得它。 另外我怎样才能够item_id替换item_id的“1”,它是拉回来? – Moshe

+0

附注:您有主要的SQL注入漏洞 – Petah

+0

另外,学习使用'JOIN'语句:'SELECT * FROM引用AS q JOIN quote_details AS qd ON qd.quote_id = q.id JOIN items AS i ON i.id = qd.item_id' – Petah

回答

1

而不是做一个循环,使用SQL JOIN

你需要像这样

SELECT * 
FROM quotes AS q 
JOIN quote_details AS qd ON qd.quote_id = q.id 
JOIN items AS i ON i.id = qd.item_id 
0

想通了这一个自己出去只是一堆试验和错误

$item_got = false; 
$id = $_GET['id']; 

$query = "SELECT * "; 
$query.= "FROM quotes "; 
$query.= "WHERE id = {$id}"; 

$confirmed_query = confirm_query($query); 
if (!$confirmed_query) { 
    echo "Query Failed".mysql_error(); 
} 

$query = mysql_query($confirmed_query); 

$query_result = mysql_fetch_assoc($query); 

echo "<table border=\"1\"><tr>"; 

foreach ($query_result as $key => $value) { 
    echo "<th>".ucwords(str_replace("_", " ", $key))."</th>"; 
} 

echo "</tr><tr>"; 

foreach ($query_result as $key => $value) { 
    echo "<td>{$value}</td>"; 
} 

echo "</tr></table><br /><br /><table border=\"1\"><tr>"; 

$query = "SELECT * "; 
$query.= "FROM quote_details "; 
$query.= "WHERE quote_id = {$id}"; 

$confirmed_query = confirm_query($query); 
if (!$confirmed_query) { 
    echo "Query Failed".mysql_error(); 
} 

$query = mysql_query($confirmed_query); 
$header_written = false; 
echo "</tr><tr>"; 
while ($query_result = mysql_fetch_assoc($query)) { 
    while ($header_written == false) { 
     foreach ($query_result as $key => $value) { 
      echo "<th>".ucwords(str_replace("_", " ", $key))."</th>"; 
      $header_written = true; 
     } 
    } 
    echo "</tr>"; 
    echo "<tr>"; 
    //problem starts here 

    foreach ($query_result as $key => $value) { 

     if ($key == "item_id"){ 
      $item_query = "SELECT item_number "; 
      $item_query.= "FROM items "; 
      $key_item = $value; 
      $item_query.= "WHERE id = {$key_item}"; 


      $confirmed_query = confirm_query($item_query); 
      if (!$confirmed_query) { 
       echo "Query Failed".mysql_error(); 
      } 

      $item_query = mysql_query($confirmed_query); 
      while ($item_number = mysql_fetch_assoc($item_query)) { 

       foreach ($item_number as $item) { 
        echo "<td>{$item}</td>"; 
       } 
      } 
     } 
     elseif ($key == "quote_id"){  
      $item_query = "SELECT quote_number "; 
      $item_query.= "FROM quotes "; 
      $key_quote = $value; 
      $item_query.= "WHERE id = {$key_quote}"; 

      $confirmed_query = confirm_query($item_query); 
      if (!$confirmed_query) { 
       echo "Query Failed".mysql_error(); 
      } 

      $item_query = mysql_query($confirmed_query); 
      while ($item_number = mysql_fetch_assoc($item_query)) { 

       foreach ($item_number as $item) { 
        echo "<td>{$item}</td>"; 
       } 
      } 
     } 

     else { 
      echo "<td>{$value}</td>"; 
     } 
    } 
    echo "</tr>"; 
} 
echo "</table>;" 
相关问题