MySQL从多个不相关的表中选择数据

时间:2012-07-26 18:03:42

标签: php mysql select

我的网站上有一个页面,我想列出客户订购零件或将自行车送去维修的单独实例。每个数据都包含在单独的表中。最终我将按日期对这些进行排序,并使用ORDER BY和COALESCE来完成这项工作,但首先我必须提取数据而我无法弄清楚如何去做。

由于两个表不相关,我不会使用JOIN来组合数据,我想我可能会使用UNION,但后来了解到联合的数据和列数需要相似。我看到有人在某个地方呕吐了一个逗号,但是我无法让我去工作。

这就是我所拥有的:

$result = mysql_query("SELECT 
        p.part_id,
        p.part_num,
        p.descr,
        p.vendor,
        p.date_entered,
        p.date_ordered,
        p.date_rcvd,
        s.serv_id,
        s.make,
        s.model,
        s.yr,
        s.vin,
        s.mileage,
        s.in_date,
        s.out_date
    FROM parts p, services s 
    WHERE cust_id = '$cust_id'");

if (mysql_num_rows($result) == 0) {
    $transactions = array();
} else {
    while ($row = mysql_fetch_assoc($result)) {
        $transactions[] = $row;
    }
}

稍后

<? foreach ($transactions as $transaction): ?>
    <? if($transaction['part_id'] && $transaction['part_id'] != "") { ?>
        [DISPLAY PART INFO]
    <? } elseif($transaction['serv_id'] && $transaction['serv_id'] != "" { ?>
        [DISPLAY SERVICE INFO]
    <? } ?>
<? endforeach; ?>

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

关于使用空列的问题? 嗯第一个表有列名,日期,件和第二个name_cust,date_bike_entered你可以做

Select name, date, pieces, null, null from table1
Union All
Select null, null, null, name_cust, date_bike_entered from table2

答案 1 :(得分:0)

解决方案A

您需要两个查询来处理(1)部分和(2)服务的请求。你需要一些逻辑来区分这两者。

解决方案B

SELECT COUNT(*) FROM parts WHERE part_id = $transaction['part_id']
SELECT COUNT(*) FROM services WHERE serv_id = $transaction['serv_id']

这将为您提供每个结果的数量。添加逻辑以根据结果提取数据。但是,如果两个查询都有结果,则需要处理逻辑。

解决方案C

有一个只允许part_id或serv_id的广播形式,并根据用户的选择进行查询。