2011-01-30 3 views
0

したがって、ユーザーはドロップダウンリストから値を選択します。私はこの値を変数に入れ、そのテーブルのID値をデータベースから選択し、選択した値を保持します。これらのデータベース値をPHPでどのように比較できますか?

これで、そのID値を使用して、テーブルAから別のテーブルBに選択された値を持つ多対多リレーションシップテーブルを取得しようとしています。多対多リレーションシップテーブルには、 ID。 PHPを使ってこれをどのように比較できますか?

だから、のようになります:

$A = $_POST['a']; 
$sql = "SELECT a, aID from TABLEA WHERE a = $A"; 

私はそのテーブルに他のIDを取得し、その後、多対多の関係の表と援助を比較するために、次に何をしますし、その後にそのIDを取りますテーブルBから値を取得しますか?

+0

接辞付きで文章を始めないでください。 – symcbean

答えて

1

あなたはSQLに参加してこれを行うことができます:

table_a.idに対応 a_idと呼ばれる二つの列、1を多対多のテーブルを結合するあなたの ab_associationと呼ばれていることを前提としてい
SELECT table_b.* FROM ab_association 
LEFT JOIN table_b ON table_b.id = ab_association.b_id 
WHERE ab_association.a_id = $specified_id; 

、およびtable_b.idに対応するb_idです。

更新:テーブル名のエイリアスが混乱していると思われるので、削除しました。

別の更新:PHPでは、ここにあなたが(サンセリフのビジネス・ロジック)ことを行うだろう方法は次のとおりです。

<? 

// connect to db here 
$a_id = mysql_real_escape_string($_POST['a_id']); 
$result = mysql_query("SELECT table_b.* FROM ab_association LEFT JOIN table_b ON table_b.id = ab_association.b_id WHERE ab_association.a_id = $a_id;"); 

// in your view/template 
while(false !== (mysql_fetch_object($result))) { 
    // build your output for each row 
} 

?> 
+0

b。*は何を表していますか?私はここで混乱しています。私のコードでこのコードを通信しようとしている順序で表示できますか?私はここでAIDを比較しているように見えませんか? – Dan

+0

これは 'table_b'のエイリアスです。 'table_b b'に注意してください。これは 'table_b AS b'と略記する方法です。 – coreyward

+0

私はここで混乱しています。私のコードでこのコードを通信しようとしている順序で表示できますか?私はここでAIDを比較しているように見えませんか? – Dan

0
SELECT * 
FROM table_a 
LEFT JOIN ab_association ON table_a.aID = ab_association.aID 
LEFT JOIN table_b ON table_b.bID = ab_association.bID 
WHERE table_a.a = $A 

注:

  • 私の代わりに、いくつかのテーブル名にアンダースコアが、そうtable_aを使用SQLと名前を区別するためのTABLEA(Coreywardのように)
  • 多くの列が必要ない場合は、「SELECT *」の代わりに必要な列を指定する必要があります
  • 多対多の一致が見つからない場合に空のレコードセットを取得する場合は、LEFT JOINの代わりにJOINを使用できます。 (LEFT JOINを使用すると、table_Aの列にまだアクセスできるという利点があります)
  • クエリに直接$ _POST-varsを使用することは決して避けてください。これは深刻なセキュリティ上のリスク(SQLインジェクション)です。
+0

待ち時間、ここではどんな値が得られますか?私はselect * from table_aを参照していますが、基本的にテーブルAからテーブルBをテーブルBに接続しようとしています。テーブルBの値を別のWebページのリストとして表示したいと思います。それを行う方法に関するアドバイスはありますか? – Dan

+0

これは私がやったのと同じことですが、彼が実際に 'table_a'のデータを取得しようとしていないので、' table_b'のすべての関連する項目についてまっすぐにスキップすることができます。 – coreyward

+0

@Coreyward:主な違いは、OPがaIDを取得せず、テーブルAの他の値を取得していないことです。次に、テーブルAを結合に含める必要があります。 – Inca

関連する問題