- ベストアンサー
データベースのLEAGUEとSUB_LEAGUEの関連取得における表示不具合の解決方法
- データベースのLEAGUEテーブルとSUB_LEAGUEテーブルを関連させるために、IDとLEAGUE_IDを元にデータを取得して表示しています。
- FOREACHで回すことで、LEAGUEのNAMEとそれに紐づく複数のSUB_LEAGUEのNAMEを表示していますが、<dt>タグに書かれている内容が2回表示されてしまいます。
- 表示が重複している問題を解決するためには、LEAGUEのNAMEを一度だけ表示し、それに対応するSUB_LEAGUEのNAMEをリスト形式で表示する方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私はsmartyは使ったことがないのですが、PHPとSQLとhtmlとhtml内スクリプトの仕組みは理解しているつもりです。目的の動作を実現するためにどの技術に何の機能を任せるかが明確に思い描けなければなりません。システムを立体的にとらえて、データベースの使い方をもう一工夫すれば実現できるのではないでしょうか。すなわち、 select LEAGUE.NAME as league_mei, SUB_LEAGUE.NAME as sub_league_mei from LEAGUE, SUB_LEAGUE where LEAGUE.ID = SUB_LEAGUE.LEAGUE_ID 上に示したSQL命令で下のようなクエリ結果が吐き出されます。 league_mei sub_league_mei PL RE PL SL CL YG CL HT ML LA ML NY この情報を表計算ソフトのピボットテーブルのように加工すれば、ご希望の表示に編集できます。 PHPのfetch命令をうまく使って、1行ごとのフィールド値を取り出して必要な表示用に使ってみましょう。
その他の回答 (1)
- seastar3
- ベストアンサー率69% (99/142)
要はSQLの組み立て方ですが、例えば SQLiteデータベース$dbのテーブルLEAGEUとSUB_LEAGUEから目的の行を取り出すためには、下のようなSQLコマンド文字列をクエリ実行コマンド sqlite_query()関数に流し込み、その結果レコードの集合をwhile文のループで回します。 $tbl = sqlite_query("select LEAGUE.NAME as league_mei, SUB_LEAGUE.NAME as sub_league_mei from LEAGUE, SUB_LEAGUE where LEAGUE.ID = SUB_LEAGUE.LEAGUE_ID ",$db); 何のリレーショナル型データベースか明示されてないので、このコードのような操作をふさわしい形で導入すれば解決すると思います。
お礼
メッセージありがとうございます。 教えて頂いたSQLだと普通にデータを取ってくるだけだと 思うので、自分がやりたい事はsqliteでも、mysqliでも 無理だと思うのですが…。 SQLだと無理だと思うので(?) phpかsmarty(tpl)で出来ればと思って質問しました。
お礼
自己解決しました。 ありがとうございました