从mysql检索数据时出现循环错误

时间:2012-03-12 01:48:31

标签: php mysql

我有一个数据库,我想根据两个数据库表.say tablea和tableb提取结果。 php在tablea中搜索特定的id,如果发现它必须完成工作。这可能会令人困惑,所以我将在这里展示我的tabela和tableb结构。我正在显示特定用户的详细信息,我将通过where子句过滤

tablea

id         userid
123         45
543         45
454         45
367         45
647         35
565         65


tableb

id        jid
23        123
24        123
25        123
4535      543
4536      543
4506      454
4507      454

我们可以看到,对于特定的用户标识,mysql tablea中可能有多个值,对于tablea的每个id,tableb id中可能有多个值。请注意,基于tablea id,我想要提供tableb的所有数据和请注意,tablea id和tableb jid是相同的,但在tableb中,jid将根据发生的次数和每次在tableb中有新的id出现几次。我没有这个查询,但它只产生一个输出。我想要全部显示。

$res1 = sql_query("SELECT id from tablea  userid='{$user['id']}' order by id");

while ($row = sql_fetch_array($res1))
{
    $phid=$row['id'];
    {  
        $res2 = sql_query("select * from tableb where jid='{$phid}' order by id desc");

        $row2 = sql_fetch_array($res2);
        $d1 = $row2['id'];
        echo ' '.$d1.' ';      
    }
}​​​​​​

3 个答案:

答案 0 :(得分:0)

这在一个查询中更容易完成:

使用IN ()子句:

SELECT * FROM tableb WHERE jid IN (SELECT id FROM tablea WHERE userid='{$user['id']}');

或使用LEFT JOIN

SELECT
   tableb.*
FROM tablea JOIN tableb ON tablea.id = tableb.jid
WHERE tablea.userid = '{$user['id']}'

这简化了PHP:

$userid = mysql_real_escape_string($user['id']);
$res = mysql_query(" SELECT tableb.* FROM tablea JOIN tableb ON tablea.id = tableb.jid WHERE tablea.userid = '{$userid}'");
if ($res) {
  while ($row = mysql_fetch_assoc($res)) {
     echo $row['id'];
  }
}

答案 1 :(得分:0)

您应该使用join两个表进行单一查询。

SELECT ti.id,t2.id as t2id
FROM tablea as t1 LEFT JOIN tableb as t2 ON t1.id = t2.jid
WHERE t1.userid = '{$user['id']}'

然后制作2D数组,以显示tableb中单个用户的多个记录。

如下所示:

$dataarray=array();
while ($row = sql_fetch_array($res1)) {
$dataarray['id'][]=$row['t2id'];
}

答案 2 :(得分:0)

这应该成功。虽然不是很友好。

$res1 = sql_query("SELECT id from tablea  userid='{$user['id']}' order by id");

while ($row = sql_fetch_array($res1)){
    $phid=$row['id'];  
    $res2 = sql_query("select * from tableb where jid='{phid}' order by id desc");
    while ($row2 = sql_fetch_array($res2)){                
        $d1 = $row2['id'];
        echo ' '.$d1.' ';      
    }
}​​​​​​