プロが教える店舗&オフィスのセキュリティ対策術

PHP・SQL初心者です。
MySQLとPHPでサイトを構築しています。
データベースへの接続・テーブル内容の表示等はできるのですが、リンクをどのようにすれば貼り付けることができるのかわからなかったため質問させていただきました。

ID 名前 友達1 友達2 ・・・
1 田中 佐藤 前田
2 山田 XXX XXX
3 佐藤 XXX XXX
4 前田 XXX XXX


このようなデータベースを用意し、
名前が「田中」さん(ID が 1)のページに

-------------------------------------------
田中さんの友達
友達1:佐藤
友達2:前田
-------------------------------------------

このように表示し、
「佐藤」「前田」の箇所にデータベースの「ID」を利用してリンクを貼り付けたいと考えております。
データの抽出・画面への表示は、
$quryset = mysql_query("SELECT ID,名前,友達1,友達2 FROM テーブル名 WHERE ID= '1' ");

while ($data = mysql_fetch_array($quryset)){}
このような関数で行っております。

表示は問題なくできているのですが、
表示の「佐藤」「前田」の箇所にリンクを設定するの方法がわかりません。
「ID」 = 1 の情報を表示しているため「山田」と表示している箇所に
<a href="http://XXXX.com/$data[ID].php">山田</a>
と設定してリンクをつけることはできます。

友達の欄の「佐藤」「前田」の箇所にリンクをつけることができません。
データベースの「ID」欄、を利用して

-------------------------------------------
田中さんの友達
友達1:<a href="http://XXXX.com/ID名.php">佐藤</a>    ID名=佐藤さんのID欄にある2
友達2:<a href="http://XXXX.com/ID名.php">前田</a>    ID名=前田さんのID欄にある4
-------------------------------------------
↓↓↓
IDが抽出されて

-------------------------------------------
田中さんの友達
友達1:<a href="http://XXXX.com/2.php">佐藤</a>
友達2:<a href="http://XXXX.com/4.php">前田</a>
-------------------------------------------

このような形で表示できれば理想なのですが、

使用する関数やSQLの構文がわかりません。
初心者のため、考え方が根本的に間違っているのかもしません。

お詳しい方、まったく別の方法でも構いませんので解決する方法をご教授頂ければ幸いです。

A 回答 (1件)

テーブル設計はどのようになっているんでしょうか?



SELECT ID,名前,友達1,友達2 FROM テーブル名

友達1、友達2がそのまま表示出来ているということは、友達のIDではなく友達の名前で保持しているのでしょうか?

もしそうであれば「テーブル設計がおかしい」としか言いようがありません。普通は友達のIDを保持します(でSQl文で引っ張ってくるときにリレーションで友達のIDと名前を同時に取得する)。

「友達の名前」で保持してしまうと名前からIDを取ってくるのは無理です(同一の名前があったりするでしょう?それを区別するための ID です)。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
友達のIDではなく名前で情報を記録しておりました。
「テーブル設計がおかしい」まさにその通りでした。

リレーションという言葉さえ知らなかったため大変参考になりました。

調べて取り組んだ結果、正しいのかはわかりませんが「自己結合」を使うことによって
今回問題の箇所は解決できました。

まだまだ超がつくほどの初心者ですが勉強を続けてよい設計ができるように頑張ります。
ありがとうございました。

お礼日時:2013/12/13 17:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!