1

私は次のSQLを持っています:

SELECT o.order_id, ol.product_manufacturer 
FROM orders o 
INNER JOIN order_lines ol 
ON o.order_id = ol.order_id 
WHERE o.deadline_time > UNIX_TIMESTAMP()

これらのテーブルもあります:

orders:
order_id, somefield, somefield, somefield...

order_lines:
id, order_id, product_manufacturer, somefield, somefield...

期限が過ぎていないすべての注文を取得し、product_manufacturer ごとにグループ化したいのですが、注文に 3 つの注文行があり、すべてが product_manufacturer ID を持つ場合、ID のものだけを返す必要があります。異なる product_manufacturer ID を持つ 2 つの注文明細がある場合、ID を 2 回返す必要があります。

私はPHPを使用していますが、次のような配列になりたいと思っています:

$group[manufacturer_id] = array(order_id, order_id, order_id);

編集:実際には、注文に複数の製造元 ID がある場合は、manufacturer_id = 999 を返したいです。間違いをお詫び申し上げます。

EDIT2: すべての注文のリストを作成していますが、メーカー別にリストする必要があります。そのようです:

SONY
Order 1
Order 2
Order 16
Order 99

PROSONIC
Order 3
Order 88
Order 98

後で検索できるようになるはずなので、WHERE ol.product_name LIKE '%$query' のようなものを作成する必要がありますが、後で機能するようになったら追加します。

4

4 に答える 4

0
SELECT ol.product_manufacturer 
FROM orders o 
INNER JOIN order_lines ol 
ON o.order_id = ol.order_id 
WHERE o.deadline_time > UNIX_TIMESTAMP()
GROUP BY ol.product_manufacturer 

ある種の UDF を使用して、製造のすべての order_id を連結できます。

類似UDFはこちら

于 2015-08-27T03:30:31.663 に答える
0

@UlrikMcArdle

最初のクエリORDER BYが探しているものではないのはなぜですか?

SELECT o.order_id, ol.product_manufacturer 
FROM orders o 
INNER JOIN order_lines ol ON o.order_id = ol.order_id 
WHERE o.deadline_time > UNIX_TIMESTAMP()
ORDER ol.product_manufacturer, o.order_id
于 2013-07-10T08:28:47.090 に答える