お世話になっております。
以下のような構成のテーブルがあり
id type name
1 1 データベース
2 1001 MySQL
3 1002 PostgreSQL
4 1003 Oracle
5 2 パソコン
6 2001 富士通
7 2002 NEC
8 3 車
9 3001 トヨタ
10 3002 日産
11 3003 ホンダ
typeが1桁のものは、大カテゴリ。
4桁のものは小カテゴリとして、4桁目と大カテゴリの数値を比較して一致した物をそのグループの小カテゴリとしています。
※idはauto_incrementですが、この例は分かり容易くカテゴリ毎に並べていますが、カテゴリの追加を考えた場合、カテゴリの並び順もバラバラになります。
これらデータを呼び出す際、以下のようにしたいのですが(スクリプトはPHPで記述しています)、どのようなSQL文が適切なのでしょうか。
データベース
MySQL
PostgreSQL
Oracle
パソコン
富士通
NEC
車
トヨタ
日産
ホンダ
以上、お恥ずかしいことかもしれませんが、上記のように振り分けるには、一度、
大カテゴリになる部分だけど抽出・変数格納
→再度データ呼び出し・・
などのようなことまで考えている次第です。
お忙しいなか恐縮ですがアドバイスのほど頂戴出来れば幸いです。
(ローカル上ではMySQL4を使っていますが、ウェブサーバーは5なので共に使えるようなものが形が望ましいです)
No.3ベストアンサー
- 回答日時:
きちんと検証できていませんが、こんな感じでやってみては
$sql=<<<eof
select big.name as bigname,small.name as smallname
from big
inner join small on big.id=small.id
order by big.id,small category_no
eof;
$res=mysql_query($sql);
$bigname="";
print "<dl>\n";
while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
if($bigname!=$row["bigname"]){
print "<dt>{$row["bigname"]}\n";
}
print "<dd>{$row["smallname"]}\n";
$bigname=$row["bigname"];
}
print "</dl>\n";
yambejp様
お世話になっております。
出来ました!SQLだけでなく、出力方法までアドバイスいただき、
大きなヒントを得たようです。ありがとうございました!
No.4
- 回答日時:
大分類、小分類と言う2個のクエリから得られるデータを
縦に並べれば良いようです。
(1)大分類
SELECT type AS dai,0 AS sho,name
FROM hoge WHERE type<10
(2)小分類
SELECT FLOOR(type/1000) AS dai,MOD(type,1000) AS sho,name
FROM hoge WHERE type>=1000
これを繋げましょう。
SELECT type AS dai,0 AS sho,name
FROM hoge WHERE type<10
UNION ALL
SELECT FLOOR(type/1000) AS dai,MOD(type,1000) AS sho,name
FROM hoge WHERE type>=1000
ORDER BY dai,sho
No.2
- 回答日時:
DBの構造がよくないですね。
もし命題がただしいなら大カテゴリは最大10個(0を抜かせば9個)
しか登録できませんがよろしいのですか?
また、リレーションする条件も不明確で、このままやっても
パフォーマンスがでにくい構造ですし、高い確率で破たんすると
思いますよ
正規化についていちどしっかり学習なさるとよいかと思います
yambejp様
ご親切な対応をありがとうございます。
>もし命題がただしいなら大カテゴリは最大10個(0を抜かせば9個)
>しか登録できませんがよろしいのですか?
ご指摘の通りです!そこまで考慮できていませんでした。(お恥ずかしい)
で、改めて構造を考えてみたのですが、以下のような構造では如何でしょうか?アドバイス頂けると幸いです。
id name
1 データベース
2 パソコン
3 車
※idで紐付けている。
no id category_no name
1 1 1001 MySQL
2 1 1002 PostgreSQL
3 1 1003 Oracle
4 2 2001 富士通
5 2 2002 NEC
6 3 3001 トヨタ
7 3 3002 日産
8 3 3003 ホンダ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 人の主観を使って判断する例を探しています。 5 2022/06/15 14:57
- その他(開発・運用・管理) 社内サイトのコンテンツのカテゴリ分けについて教えてください。 いま、社内向けポータルサイトを直そうと 1 2023/04/18 23:08
- Excel(エクセル) Excel2016 行間を詰めたい&同じカテゴリなら上位2つだけを表示したい 5 2022/06/03 12:19
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- その他(gooサービス) カテ違いだと回答をいただけないんでしょうか? どこにどんなカテゴリがあるのかわかりにくくて、教えてg 3 2023/06/29 21:55
- 教えて!goo このアプリの法律カテゴリってどこにあるんですか? 質問する際、自分の質問に適したカテゴリが「こちらの 2 2022/11/22 20:36
- 教えて!goo ここのサイトは、カテゴリ選択に意味があるのでしょうか? 特定のカテゴリしか見ていない人には意味がある 7 2023/07/17 14:20
- 哲学 形式学 1 2023/06/23 17:19
- その他(暮らし・生活・行事) パンジーの花弁が食い散らかされました。犯人は誰でしょうか…?以前もパンビオなん鉢も食い散らかされたの 3 2023/03/14 12:27
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マイクラPC版のコマンドで効率...
-
エクセルで最後の文字だけ置き...
-
阪急三番街 ATM(ゆうちょ)は...
-
同一のユーザー、同一商品のと...
-
Unionした最後にGROUP BYを追加...
-
DataTableで重複行を削除したい
-
書籍の内容はまともでしょうか?
-
副問合せの書き方について
-
SQL Left Join で重複を排除す...
-
WHERE id = ? について
-
min句のSQLを改造し二番目に小...
-
MySQLのint型で001と表示する方...
-
別テーブルからSELECTした値を...
-
所有格の意味
-
select文のwhere句に配列を入れ...
-
スクリーンセイバー
-
MySQLの抽出について
-
ポスグレでの幾何学データ配列...
-
AUTO_INCREMENTのあるテーブル...
-
【MySQL】本当に困っているので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報