2016-12-22 22 views
0

Usersテーブルをカウント:はPHP/MySQLは、ほとんどのご注文商品

enter image description here

ORDER_ITEMS表:

enter image description here

Ordersテーブル:

enter image description here

$sql[2] = "SELECT p.p_name, o.created, COUNT(oi.id) AS db FROM products AS p 
      INNER JOIN order_items AS oi ON oi.product_id = p.id 
      INNER JOIN orders AS o ON o.id = oi.order_id 
      GROUP BY p.p_name 
      ORDER BY db DESC, o.created DESC 
      LIMIT 1"; 

$result3= mysqli_query($conn,$sql[2]) or die(mysqli_error()); 
if (mysqli_num_rows($result3)>0) 
{ 
    while ($record = mysqli_fetch_array($result3)) 
    { 
     echo $record['p_name']." - ".$record['db']." - ".$record['created']."<br/>"; 
    } 
} 

私は最も注文された製品名、そしてどのようにマネキン製品が販売されるのか、そしてこの製品が発注された最後の日付を数えたいと思う。この場合、結果は次のようになります。 Barack - 4 - 2016-12-15 09:36:21しかし、私のSELECTは3だけカウントしています。どのようにアイデアを修正できますか?

+0

offtopicあなたはGROUP BYを間違って使用しています。 o.createdはGROUP BYステートメントに名前が付けられていないので、すべての値になります。そして、テーブルからSQLダンプを作成して、代わりにここに画像(またはsqlfiddle.com)を投稿してください。 –

答えて

1

これを試してみてください:

SELECT 
    p.p_name, 
    MAX(o.created) AS created, 
    COUNT(oi.id) AS db 
FROM order_items AS oi 
LEFT JOIN orders AS o ON oi.order_id= o.id 
INNER JOIN products AS p ON p.id = oi.product_id 
GROUP BY oi.product_id 
ORDER BY COUNT(oi.id) DESC 
LIMIT 1 

更新日:
原因は、あなたがLEFT JOINを使用し、4を取得したい場合はそうINNER JOINは、あなたに3を与えるだろう、あなたのテーブルOrdersにはorder_id = 3はありません。

+0

同じ結果が4の –

+0

@ FaragoRolandあなたのテーブル 'order'には' order_id = 3'はありません。 4を取得したい場合は、LEFT JOINを使用して、私の答えを更新しました。 – Blank

+0

ありがとう、今すぐフォークする:) –

関連する問題