![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
mysql php 超初心者です。
mysqlで連結先のテーブルのカウントを取得したいと思っています。
以下のような a_tblと b_tbl があり、
a_tbl の a_index と b_tbl の ab_no を
結合して b_tbl の ab_no のカウント数を
理想結果表に表示したいと思っています。
どう書いたら b_tbl の ab_no をGROUP(?) COUNTして
理想結果表の様にbテーブルのab_noのcount数を表示できるのでしょうか?
-a_tbl-
a_index | a_data
1 | りんご
2 | 信号
3 | 空
4 | カラス
-b_tbl-
b_index | ab_no | b_data
1 | 1 | 青
2 | 1 | 赤
3 | 2 | 青
4 | 2 | 赤
5 | 2 | 黄
6 | 3 | 青
7 | 3 | 白
8 | 3 | 黒
9 | 4 | 黒
-理想結果表-
a_index |a_data | bテーブルのab_noのcount数
1 | リンゴ | 2 色
2 | 信号 | 3 色
3 | 空 | 3 色
4 | カラス | 1 色
私が見よう見まねで考えた式ですが、やはりこれでは表に2しか出ませんでした。
$sql = "SELECT Count(*) AS cnt FROM b_tbl
LEFT JOIN a_tbl ON b_tbl.ab_no = a_tbl.a_index GROUP BY b_tbl.ab_no";
質問の仕方もよくわからないのでわかりにくいかも知れませんが
どうかご教授の程よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
>$rst = mysql_query($sql, $con);
おそらく参考にされている書籍やサイトが古いですね
すでにmysql_query()は非推奨になっていますので
いまはmysqli系の処理か、PDOを利用した処理が正しいです。
環境を見直したほうがよいかと思います。
ご回答ありがとうございます。
ご親切に色々教えて頂いて大変助かります。
推奨されていないという事全然知りませんでした。
何かセキュリティ的なものでしょうか?
見直してみます。ほんとうにありがとうございました。
No.2
- 回答日時:
うごくかわからないですが
select a_tbl.a_index, a_tbl.a_data, color.cnt from a_tbl, (select ab_no, count(*) as cnt from b_tbl group by ab_no) color where a_tbl.a_index = color.ab_no;
ご親切なご回答大変ありがとうございます。
こんな式があるのですね!
color が入っているので何か色取得でしょうか?
本当に申し訳ないのですが、質問した式は簡素化して
色の数だと皆さんにわかって頂けるかな?と思い
例題とし書かさせて頂きました。
ただcolorを抜きにしてもこの式は私には
難しくてよくわかりませんでした。
しかし、私がやってみたかったのはこの式のとおりfrom a_tbl,からの式ですので、私なりにfrom a_tblから何とかならないか?と考えていました。(select ab_no, count(*) as cnt from b_tbl group by ab_no) という書き方も有るのですね。今度使ってみようと思っています。大変勉強になり参考になりました。ありがとうございます。また何かありまたら是非よろしくお願い致します。
No.1
- 回答日時:
>やはりこれでは表に2しか出ません
おそらく、データを回してないからでしょうね
$sql = 'SELECT a_index,a_data,Count(*) AS cnt FROM b_tbl
LEFT JOIN a_tbl ON b_tbl.ab_no = a_tbl.a_index GROUP BY b_tbl.ab_no';
foreach ($conn->query($sql) as $row) {
print $row['a_index'] . "\t";
print $row['a_data'] . "\t";
print $row['cnt'] . "<br>\n";
}
のようにループしてデータを抜き出してください
お礼が遅くなりまして申し訳ありません。
質問してから色々考えさせて頂いていました。
この通りにやったら出来ました。ループさせる式や仕組みがわかっていないのですが、
ループしていなかったのが原因でした。
ただ私は前からwhileを使っていたので
以下のようにしてみました。これでもできました。
$sql = 'SELECT a_index,a_data,Count(*) AS cnt FROM b_tbl
LEFT JOIN a_tbl ON b_tbl.ab_no = a_tbl.a_index GROUP BY b_tbl.ab_no';
$rst = mysql_query($sql, $con);
while($col = mysql_fetch_array($rst)) {
$cnt = $col[cnt];
$body .= "<TR>
<TD>$col[a_index]</TD>
<TD>$col[a_data]</TD>
<TD>$cnt</TD> </TR>";}
ご回答大変参考になりました。
本当にありがとうございました。
また何かありましたら是非よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- PHP PHPSpreadsheetを使って関数を繰り返し埋め込みたい 1 2023/05/24 11:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複していないレコードの抽出...
-
int(11)の(11)とは何を意味して...
-
フィルターかけた後、重複を除...
-
SQLで特定の項目の重複のみを排...
-
差し込み後、元データを変更し...
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
Oracleのデータ型、NUMBERについて
-
質問です How is your school l...
-
カーソル0件の時にエラーを発生...
-
副問合せの書き方について
-
SQLServerで文字列の末尾からあ...
-
select文のwhere句に配列を入れ...
-
SQLで列名を変数にできないでし...
-
SQL文で、合計が0のレコードを...
-
VBAのAccessでDATE型のINSERT
-
誰か教えてください
-
LEFT JOIN あいまいな外部結合
-
INSERT文でフィールドの1つだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複していないレコードの抽出...
-
int(11)の(11)とは何を意味して...
-
合計点順にソートかつ同一人の...
-
ACCESS→SQLServerへ
-
2つのテーブルの集計
-
IDの採番について
-
mysqlで連結先のテーブルをカウ...
-
サブクエリ:各カテゴリ内で最...
-
縦持ちになっているデータを横...
-
チェックボックスからの受け渡...
-
MySQL 文字列の部分一致の書き方
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
for whichの使い方
-
カーソル0件の時にエラーを発生...
-
SQLで特定の項目の重複のみを排...
おすすめ情報