MYSQL多表联合查询问题

比如我有两个表:表A是火车表,其中字段含义:ID:火车的ID,NAME,NU1:第一节车厢货物的ID,NU2:第二节车厢货物的ID,依次类推一直到NU30,未装载的车厢的... 比如我有两个表:
表A是火车表,其中字段含义:ID:火车的ID,NAME,NU1:第一节车厢货物的ID,NU2:第二节车厢货物的ID ,依次类推一直到NU30,未装载的车厢的货物ID为"-1"
比如 ID NAME NU1 NU2 ............
10 A车 1000 1001 ............
11 B车 1001 1000

表B是货物表,其中字段含义:ID:货物的ID,IT_NAME:货物的名称
比如: ID IT_NAME
1000 煤
1001 碳

我希望通过查询得到一张大表,显示每列火车上都有哪些货物以及ID,最后格式是:

10 A车 1000 煤 1001 碳 1002钢 ................
11 B车 1001碳 1000 煤 1003 铜 ................
展开
 我来答
majiguang
2011-03-14 · TA获得超过757个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1359万
展开全部
这种结构要一次查出来没有什么高效的方法,只能按一楼的方法去做,如果要提高效率,应该要分两步,第一步把结果集得到,然后遍历得到各节车厢的货物名称。
假设你使用adodb:
$rows=$db->getAll("select * from A ");
for($i=0;$i<count($rows);$i++)
{
for($j=1;$j<=30;$j++)
{
$index1="NU".$j;
$index2="item".$j."_name";
if($rows[$i][$index1]>-1)
{
$rows[$i][$index2]=$db->getOne("select item_name from B where ID=".$rows[$i][$index1]);
}
}
}
结果集得到后,可以根据要求显示的格式做具体处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yongirl320
2011-03-14 · TA获得超过830个赞
知道小有建树答主
回答量:280
采纳率:100%
帮助的人:480万
展开全部
//先读出所有列车信息:

$query = mysql_query("SELECT * FROM A ");
$a_list = array(); //这里是 所有火车信息 数组
while($record = mysql_fetch_assoc($query)) {
$a_list[] = $record;
}

// 读取所有货物信息
$query = mysql_query("SELECT * FROM B ");
$b_list = array(); //这里是 所有货物信息 数组
while($record = mysql_fetch_assoc($query)) {
$hid = $record['id'];
$b_list[$hid] = $record['it_name']; //这里重要
}

// 循环 插入 对应的 货物名字 , 没有在读取数据库所以 速度快。
foreach($a_list as $k=>$v) {
for($i=1;$i<=30;$i++) {
if($v['NU'.$i] != -1){
$it_id = $v['NU'.$i]; //货物的编号
$a_list[$k]['NU_IT'.$i] = $b_list[$it_id]; //创建新的元素 插入货物名称。
}
}
}

//那么结果 $a_list 这个数组 就是你要的 结果了。

//这里 NU_IT1 , NU_IT2, ...... NU_IT30 这些 就是货物名字

// 这个 只是读了 2次 数据 所以 效率应该很高了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-14
展开全部
我想到一个笨方法
SELECT A.ID, A.NAME, B11.ID, B11.IT_NAME, B12.ID, B12.IT_NAME FROM A, B B11, B B12
where A.NU1=B11.ID and A.NU2=B12.ID
这个sql你根据自己的实际需要,可以改写,不过效率可能很差
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
466546543
2011-03-14 · TA获得超过406个赞
知道答主
回答量:93
采纳率:0%
帮助的人:80.2万
展开全部
我觉得你应该将表好好设计一下!你这样的话表就太死了!不便扩展!还有就是不管你怎么查询效率都不高!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式