• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:すいません、質問をさせて下さい。)

データベースのLEAGUEとSUB_LEAGUEの関連取得における表示不具合の解決方法

このQ&Aのポイント
  • データベースのLEAGUEテーブルとSUB_LEAGUEテーブルを関連させるために、IDとLEAGUE_IDを元にデータを取得して表示しています。
  • FOREACHで回すことで、LEAGUEのNAMEとそれに紐づく複数のSUB_LEAGUEのNAMEを表示していますが、<dt>タグに書かれている内容が2回表示されてしまいます。
  • 表示が重複している問題を解決するためには、LEAGUEのNAMEを一度だけ表示し、それに対応するSUB_LEAGUEのNAMEをリスト形式で表示する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • seastar3
  • ベストアンサー率69% (99/142)
回答No.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行ごとのフィールド値を取り出して必要な表示用に使ってみましょう。

NeilMania
質問者

お礼

自己解決しました。 ありがとうございました

その他の回答 (1)

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

要は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); 何のリレーショナル型データベースか明示されてないので、このコードのような操作をふさわしい形で導入すれば解決すると思います。

NeilMania
質問者

お礼

メッセージありがとうございます。 教えて頂いたSQLだと普通にデータを取ってくるだけだと 思うので、自分がやりたい事はsqliteでも、mysqliでも 無理だと思うのですが…。 SQLだと無理だと思うので(?) phpかsmarty(tpl)で出来ればと思って質問しました。

関連するQ&A