两个查询中的多个while循环

时间:2015-01-17 14:46:18

标签: php mysql

我有2个查询。 和2循环。

我的问题是当我调出值时。只有一个查询和一个循环是正确的。另一个循环显示重复值。

这就是我所拥有的:

$query1=mysql_query("SELECT * FROM table1");
$query2=mysql_query("SELECT * FROM table2");

while($row1=mysql_fetch_array($query1)){
  while($row2=mysql_fetch_array($query2)){

  echo  $row1['nameofattribute']  ;
  echo  $row2['nameofattribute']  ;
  }
}

查询1的输出是正确的。但查询2的输出是重复值。 例如 : query 1 = $ row1 = 2 $ row1 = 3 $ row1 = 4 查询2 = $ row2 = 3 $ row2 = 3 $ row2 = 3

相反它应该是 query 1 = $ row1 = 2 $ row1 = 3 $ row1 = 4 查询2 = $ row2 = 1 $ row2 = 2 $ row2 = 3

在上面是我对代码的简单翻译。这是我的真实代码:

$query1 = mysql_query("SELECT remarks FROM passed_deliverable WHERE user_id=$uid && deliverable_category_id=4");

    $query2=mysql_query("SELECT 
    deliverable_id, deliverable_title, deliverable_desc, adviser_id ,deliverable_category_id
    FROM deliverable d
    WHERE d.deliverable_category_id=4
    &&  EXISTS (
    SELECT 'X'
    FROM passed_deliverable pd 
    WHERE pd.deliverable_id = d.deliverable_id && user_id='".$_GET['edit']."' && adviser_id='".$_SESSION['user_id']."' ) ");

    while($x=mysql_fetch_array($query1)){
    while($deliverable=mysql_fetch_assoc($query2)){


    echo "
    {$deliverable['deliverable_desc']}
    {$x['remarks']}  
    ";

3 个答案:

答案 0 :(得分:1)

假设您只想将两个表的结果行按其显示顺序组合(忽略超出其他表的结果):

$a1 = array();
$a2 = array();
while($x=mysql_fetch_array($query1)) {
    $a1[] = $x['remarks'];
}
while($deliverable=mysql_fetch_assoc($query2)) {
    $a2[] = $deliverable['deliverable_desc'];
}
for($i=0; $i < count($a1) and $i < count($a2); $i++) {
    echo "\n\n".$a2[$i]."\n".$a1[$i];
}

答案 1 :(得分:1)

试试这个: 先生的其他答案或循环。 hellcode 它表明您也可以使用数组值而不是仅使用数组

$a1 = 0[];
$a2 = 0[];
while($x=mysql_fetch_array($query1)) {
$a1[] = $x['remarks'];
}
 while($deliverable=mysql_fetch_assoc($query2)) {
     $a2[] = $deliverable['deliverable_desc'];
}
for($i=0; $i < count($a1) and $i < count($a2); $i++) {
echo "\n\n".$a2[$i]."\n".$a1[$i];
}

答案 2 :(得分:0)

Deprecation of mysql_ functions。请避免使用mysql_函数。无论如何,你的查询似乎不寻常。因为我们在您的查询中没有看到任何WHERE子句。这意味着它将返回重复值。每行Table1将检查Table2的所有行。