我有一个数据库,我想根据两个数据库表.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.' ';
}
}
答案 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.' ';
}
}