1

2 つのテーブル項目と入札があります。それらに参加して、各アイテムの最高入札額を選択したいです。現在、テーブルは空で、mysqli_num_rows を実行すると 0 が返されるようにしたいのですが、1 が返されます。0 が返されたときに、新しい項目がないことを示すテキストを表示したい

SELECT i_name, i_id, MAX(price) FROM items JOIN bid USING (i_id)

私の質問は次のとおりです。

なぜ1を返すのですか?ステートメントを修正するにはどうすればよいですか?

4

1 に答える 1

5

基本的に、MAX(price) が含まれているため 1 行が返されるため、クエリは常にその値を返します。テーブルが空の場合は null が返されるため、1 行になります。

GROUP BY集計関数を含めて句を含めないたびに、結果は 1 行になります。

修正は簡単です: 次のGROUP BY句を使用します。

SELECT i_name, i_id, MAX(price) FROM items JOIN bid USING (i_id) GROUP BY i_name, i_id

アイテムがなく、既存のアイテムに入札がない場合、そのクエリは 0 行を返します。

ただし、クエリで入札のないアイテムも表示し、アイテムがない場合に 0 行のみを返すようにする場合は、LEFT JOIN を使用します。

SELECT i_name, i_id, MAX(price) FROM items LEFT JOIN bid USING (i_id) GROUP BY i_name, i_id
于 2013-06-23T00:03:39.470 に答える