-1

現在、2 つの mysql テーブル「order」と「order_items」からの情報を使用してテーブルを作成しようとしています。これらは両方とも注文 ID を共有しているためです。

注文

http://gyazo.com/b5761696c5650d0f24d883fd914f3564.png

order_items

ここに画像の説明を入力

このようなテーブルを同じ行に製品名とともに表示したいのですが、ループが発生する可能性があります

ここに画像の説明を入力

私がやっていることのより多くのマークとして、内部結合でこれを行いたい

これは私が現時点で持っているものですが、現時点では機能しません

$query = "SELECT order.date_bought, order.total_price, order_items.product_name FROM order INNER JOIN order_items ON order.order_id = order_items.order_id WHERE order.student_id = $id ORDER BY order_id DESC";

$result = mysql_query($query);

$num = mysql_num_rows($result);

$i=0;

while($i < $num){
$date_bought = mysql_result($result,$i,"date_bought");

echo $date_bought;

}

エラー: mysql_num_rows() は、パラメーター 1 がリソースであると想定しています。ブール値が指定されています

しかし、クエリのせいだと確信しています

4

2 に答える 2

2

orderは予約語です。エスケープします:

SELECT 
  o.order_id,
  o.date_bought, 
  o.total_price, 
  oi.product_name 
FROM `order` AS o
INNER JOIN order_items AS oi ON o.order_id = oi.order_id 
WHERE o.student_id = $id 
ORDER BY o.order_id DESC;

これらの名前は避けるようにしてください。


注文ごとに同じ行に製品名を表示する場合は、次のGROUP_CONCAT関数を使用します。

SELECT 
  o.order_id,
  o.date_bought, 
  o.total_price, 
  GROUP_CONCAT(oi.product_name SEPARATOR ' ') AS ProdcutNames
FROM `order` AS o
INNER JOIN order_items AS oi ON o.order_id = oi.order_id 
WHERE o.student_id = $id 
GROUP BY o.order_id,
         o.date_bought, 
         o.total_price
ORDER BY o.order_id DESC;
于 2013-03-19T18:14:43.203 に答える
0

mysql の初心者ですね。それを試してみてください:

SELECT * FROM order o INNER JOIN order_items oi ON o.order_id = oi.order_id WHERE order.student_id = $id GROUP BY o.order_id ORDER BY o.order_id DESC 

「グループ」は結果を複製することではありません。

于 2013-03-19T18:34:37.033 に答える