Php 单个mysqli查询中的多个select-join联合

Php 单个mysqli查询中的多个select-join联合,php,select,join,mysqli,union,Php,Select,Join,Mysqli,Union,我试图将三个表的左连接放在一个查询中 我可以一次让一个select join语句工作,但是当我想让两个select语句在一个查询中工作时,它不能很好地工作 基本上,我想要的是城市和州的名字,而不是身份证 无论是城市还是州,只有一个会成功地给我名字,而另一个只会给我id 我想知道城市和州的名字。我怎样才能做到这一点 <?php if($state > 0 && $city > 0 && $area <

我试图将三个表的左连接放在一个查询中

我可以一次让一个select join语句工作,但是当我想让两个select语句在一个查询中工作时,它不能很好地工作

基本上,我想要的是城市和州的名字,而不是身份证

无论是城市还是州,只有一个会成功地给我名字,而另一个只会给我id

我想知道城市和州的名字。我怎样才能做到这一点

         <?php  
          if($state > 0 && $city  > 0 && $area < 1 ){

       $sqla= "(SELECT listing.*, state.state_name as state FROM listing LEFT JOIN state ON listing.state = state.id) UNION (SELECT listing.*, city.city_name as city FROM listing LEFT JOIN city ON listing.city = city.id)";

          $sql=mysqli_query($con,$sqla);  


            if (mysqli_num_rows($sql) > 0) {
             while($row = mysqli_fetch_array($sql)){ ?>
          <?php echo $row['id']; ?>
       <?php echo $row['state']; ?>
       <?php echo $row['city']; ?>

这可能是因为您错误地使用了UNION语句。我猜您想使用另一个左连接,这样您就有了一组来自列表的所有行与state_name关联(这里的city是列表中的city列),以及另一组来自第二个查询的列表中的所有行,同样,state字段是列表表中的state列。你应该这样做:

 SELECT listing.*, state.state_name, city.city_name FROM listing LEFT JOIN state ON listing.state = state.id LEFT JOIN city ON listing.city = city.id