データベースに 2 つのテーブルがあります
table: products table: companies
+-----------+------------+ +------+------------+
| name | company_id | | id | name |
+-----------+------------+ +------+------------+
|Product 1 | 1 | | 1 | Company 1 |
|Product 2 | 1 | | 2 | Company 2 |
|Product 3 | 3 | | 3 | Company 3 |
|Product 4 | 1 | | 4 | Company 4 |
|Product 5 | 1 | | ... |
|Product 6 | 3 | +------+------------+
|Product 7 | 2 |
|... |
+-----------+------------+
ここで、テーブルのすべての会社の名前とリストの会社名の後の製品の名前を持つ HTML 要素を使用して、会社セレクター(会社ごとに製品をフィルタリングする) を作成する必要があります。SELECT
companies
COUNT
したがって、私の目標はSELECT
次のようなオプションを取得することです。
- 会社1 (4)
- 会社 2 (1)
- 会社 3 (2)
- 会社 4 (0)
(注: 括弧内のカウントは上記の例からのものです)
これまでに何を試しましたか?
mysql_*
以前は関数を使用していましたが、その後はmysqli
手続き型モデルでした。while
これは、会社の 1 つのクエリとブロック内の別のクエリを使用して手動で行うことができCOUNT
、要素を取得します (ループ内の現在の会社の ID によってフィルター処理されます)。今、私はこれに取り組もうとしていますが、PDO object
これは私にとって新しいことであり、あまり慣れていません。
質問
COUNT
1つのクエリで(JOINs
または何かを使用して)取得することは何とか可能ですか?$dbPDO
そうでない場合、オブジェクトを使用してループ内でクエリを実行するにはどうすればよいですか (古い方法) 。それとも他の方法ですか?
ここでいくつかの例を見てきましたが、私の要件に適合するものは何もありませんでした。何かを見逃したのかもしれませんが、PDO を扱うのはまだ苦痛です (できるだけ早く学ばなければなりません)。
私自身の質問を見ると、難しいことではないと思いますが、最悪の場合、自分で解決策を見つけることができません。
最後に、私は に解決策を持っていますがmysqli
、私はそれがあまり好きではなく、このタスクを実行する簡単な方法があると思います!
この質問は私が必要としているものだと思いましたが、答えのクエリをまだ理解していません。
これまでのところ、私はこのコードを持っていますが、製品をカウントする方法がわかりません:
$dbPDO = new PDO('mysql:dbname=comixdb;host=localhost', 'root', '');
$sel_cat = ''; # selector HTML
$sql = "SELECT * FROM categories ORDER BY name";
foreach ($dbPDO->query($sql) as $row) {
$sel_cat .= "<option value=\"{$row['id']}\">{$row['name']}</option>";
}
$sel_cat = "<select><option value=\"*\">All categories</option>$sel_cat</select>";
echo $sel_cat;
質問が十分に明確になったことを願っています。どんな助けでも大歓迎です。