2016-11-23 71 views
1

嗨,大家好,我如何将这3张表合并成一个单一的查询在php中?我如何在一个查询中结合3个表php

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); 
     ?> 

体育表被连接到匹配b S_ID而匹配表连接由M_ID

匹配表来调度表 enter image description here

附表表 enter image description here

体育中 enter image description here

回答

0

你可以在MySQL中使用join()方法连接两个或多个表,如:

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,布尔给定。这一位先生 – 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` 

上述查询将解决您组合三个表的基本问题。但这是一个不好的做法。会有很多冗余数据。你只选择三列。那里面也没有索引。你无法弄清楚每一行是如何彼此不同的。请提及查询的目的或逻辑。以便我们可以相应地调整查询。

更新:我更新了我们在查询中选择的列。现在有一个唯一的列计划ID来唯一标识每行 。希望这会帮助你。您也可以选择其他栏目 取决于必要性。

+0

这是为调度目的先生。预定日期和地点存放在时间表中的地方,参加比赛的球队和体育名称中的体育名称。我试图在一个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的,S_NAME FROM运动甲 LEFT JOIN通过A.m_id ASC匹配乙ON A.m_id = B.m_id LEFT JOIN时间表C ON A.s_id = B.s_id ORDER

+0

给我和这样的错误先生,mysqli_fetch_array()期望参数1是mysqli_result,布尔给定 – orange

0

嗨,这是您正确的查询。你正在接错,因为你没有使用正确的查询。

SELECT teamone,teamtwo,s_name FROM sport as A right join match with B ON A.s_id = B.s_id right join schedule as C ON B.m_id = C.m_id by B.m_id asc

现在您可以通过它来获得适当的结果。此查询根据您的模式生成。