mysql,php)使用union all从多个表的所有列中获取值

huwehgph  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(253)

我需要循环两个不同的表并从所有列中获取值。
我试着用工会来解决我的问题。
代码如下所示:

if(isset($_GET['country'])){
        $sql = "SELECT name, capital, population,description,null FROM countries WHERE name ='France'

        UNION ALL
             SELECT null,null,null,null,attraction_name FROM attraction_list WHERE country_name='France'
        ";
        mysqli_select_db($conn,'travelapp') or die("database not found");
        $result = mysqli_query($conn,$sql);
        if($result){
            $countryName;$capital;$population;$description;$attraction;
            while($row = $result->fetch_row()){
                $countryName=$row[0];
                $capital=$row[1];
                $population=$row[2];
                $description=$row[3];
                $attraction=$row[4];
            }
            $resultArray = array(
                'country'=>$countryName,
                'capital'=>$capital,
                'population'=>$population,
                'description'=>$description,
                'attraction'=>$attraction
            );
            echo json_encode($resultArray);
        }
    }

但是,这段代码并不像我预期的那样工作。我想打印出来
名称、资本、人口、国家表中的描述和景点列表表中的景点名称。
所以我预期的输出应该是这样的:
{“国家”:法国,“首都”:巴黎,“人口”:64750000,“描述”:一些文字,“景点”:拉维耶·查理特}
但是我的php现在打印出什么:

while循环有问题吗?或者也许有比联合更好的解决方案?

7qhs6swi

7qhs6swi1#

你真正想要的是 LEFT JOIN . 使用 LEFT JOIN 以防有没有景点的国家。试试这个:

$sql = "SELECT c.name, c.capital, c.population, c.description, a.attraction_name 
        FROM countries c
        LEFT JOIN attraction_list a ON a.country_name = c.name
        WHERE c.name ='France'";

如果一个国家有多个景点,这个查询会给你多行。

{"country":France, "capital":Paris, "population": 64750000, "description":Some text, "attraction":La Vieille Charite},
{"country":France, "capital":Paris, "population": 64750000, "description":Some text, "attraction":Eiffel Tower}

如果你只想要一排,例如。

{"country":France, "capital":Paris, "population": 64750000, "description":Some text, "attraction":La Vieille Charite, Eiffel Tower}

你可以用 GROUP BY 聚集。

$sql = "SELECT c.name, c.capital, c.population, c.description, GROUP_CONCAT(a.attraction_name)
        FROM countries c
        LEFT JOIN attraction_list a ON a.country_name = c.name
        WHERE c.name ='France'
        GROUP BY c.name";

相关问题