2016-11-23 10 views
1

こんにちは、私はこの3つのテーブルをPHPの1つのクエリでどのように組み合わせますか?phpで1つのクエリで3つのテーブルを組み合わせるには

PHP

<?php 
     $db_name = "atfest_db"; 
     $mysql_user = "root"; 
     $mysql_pass = ""; 
     $server_name = "localhost"; 
     $sql = "SELECT teamone,teamtwo,s_name FROM sport as A right join matches 
     as B right join schedule as C ON A.s_id = B.s_id ORDER by m_id asc"; 
     $con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$db_name); 
     $result = mysqli_query($con,$sql); 


     $response = array(); 


     while($row=mysqli_fetch_array($result)) 

     { 
     array_push($response, array("teamone"=>$row[0], "teamtwo"=>$row[1], 
     "s_name"=>$row[2])); 

     } 

     echo json_encode (array("schedule_response"=>$response)); 




     mysqli_close($con); 
     ?> 

マッチテーブルはM_ID

マッチ表 enter image description here

スケジュール表 enter image description hereによってテーブルをスケジュールに接続されているスポーツ・テーブルが一致B S_IDに接続されています

スポーツ表 enter image description here

答えて

0

あなたは(結合を使用して二つ以上のテーブルを結合することができます)mysqlの中のような:

select t1.col1, t2.col2 
FROM table1 as t1 JOIN table2 as t2 
on t1.some_col = t2.some_col // where t1, t2 have a common column on which joining is done 
where condition; 

Reference

0

代わりに、このSQL文をお試しください:

SELECT B.teamone,B.teamtwo,A.s_name 
FROM sport A 
LEFT JOIN matches B 
LEFT JOIN schedule C 
ON A.s_id = B.s_id 
ORDER by C.m_id asc 
+0

私にはエラーが発生します – orange

+0

どのようなエラーがありますか? – AlexioVay

+0

mysqli_fetch_array()は、パラメータ1がmysqli_result、booleanが指定されていると想定しています。この1つのサー – orange

0
SELECT `schedule`.`id`, (and other relevant fields from schedule table), `matches`.`m_id`, `matches`.`teamone`, `matches`.`teamtwo`, (and other relevant fields from matches table), `sport`.`s_id`, (and other relevant fields from sport table) 
FROM `sport` 
RIGHT JOIN `matches` ON `matches`.`s_id` = `sport`.`s_id` 
RIGHT JOIN `schedule` ON `schedule`.`m_id` = `matches`.`m_id` 
ORDER BY `schedule`.`id` 

上記のクエリは、3つのテーブルを結合する基本的な問題を解決します。しかし、これは悪い習慣です。冗長なデータがたくさんあります。あなたは3つの列だけを選択しています。そこには、インデックスもありません。それぞれの行がどう違うかを理解することはできません。クエリの目的やロジックについて言及してください。それに応じてクエリを微調整することができます。

更新:クエリで選択している列を更新しました。今度は、各行 を一意に識別する固有の列スケジュールidがあります。これがあなたを助けることを願っています。他の列を選択することもできます は必要に応じて異なります。

+0

これはスケジューリングの目的のためです。スケジュールされた日時と会場がスケジュール表に格納されている場所では、試合に参加するチームとスポーツ名のスポーツ名が表示されます。私はこれを1つのjsonオブジェクトにエコーしようとしています。 – orange

+0

は私にこのようなエラーがありますが、mysqli_fetch_array()はパラメータ1がmysqli_result、ブール値が – orange

+0

、@orangeはmysqli_query()関数の後に次のコードを入れてください。 'if($ result){print_r($ result); die();} else {var_dump(mysqli_error($ con)); die();} 'ここに結果を投稿してください。 – JTheDev

0

SELECT teamone、teamtwo、スポーツFROM s_name LEFT JOINをはA.m_idのASCによってA.m_id = B.m_id LEFT JOINは、スケジュールC ON A.s_id = B.s_idオーダーBと一致

+0

は私にこのようなエラーを与えます、mysqli_fetch_array()はパラメータ1がmysqli_result、boolean given – orange

0

こんにちはこれはあなたのための正しいクエリです。

SELECT teamone、teamtwo、s_nameスポーツからの権利結合はBと一致します。A.s_id = B.s_id右の結合スケジュールはC ON B.m_id = C.m_id order by B.m_id asc

これで、適切な結果を得ることができます。このクエリは、スキーマに従って生成されます。

関連する問題