来自多个表的mysqli查询

时间:2016-11-08 18:20:36

标签: php mysql

我有一个用PHP MYSQL编写的android webservice ...大约有三个表,我们的开发人员正在查询并将结果放在json中。但是,当其他表中没有任何行而不是用户名返回空时,我有问题。但是,一个表中已有用户名。它的制作查询如下

<?php

// Grab User submitted information
$UID = $_POST["UID"];

// Connect to the database
$con = mysqli_connect("localhost","myid","mypass", "mydb");
// Make sure we connected succesfully
if(! $con)
{
    die('Connection Failed'.mysqli_connect_error());
}

// mysql_select_db("tabdevel_yourdb",$con);
$result = mysqli_query($con,"SELECT l.username, 
                                    q.quote_id,q.status,q.credit,q.QOD,
                                    w.Total,w.Completed,w.Withdrawl,w.Credit 
                                    From quotes q, 
                                        login_details l,
                                        user_details w 
                                    WHERE l.UID = q.UID
                                      AND l.UID = w.UID  
                                      AND l.UID = '$UID' ");

 //echo $result;
$json = array();
if($result==false)
{
    die(mysqli_error());
}else
{
    if(mysqli_num_rows($result))
    {

        while($row=mysqli_fetch_assoc($result)){
            $json['Details'][]=$row;
        }
    }
}

$json_output1 = json_encode($json);
echo $json_output1;

?>

我有如下的数据库结构

login_details 已提交:UID,用户名,电子邮件,移动电话号码,密码,图片

引用已提交:quote_id,quote,status,credit,UID,QOD,quote_date

已提交

user_details :user_details_id,UID,点数,提款,总计,已完成

我们缺少什么? 感谢

1 个答案:

答案 0 :(得分:0)

您要找的是the JOIN keyword。目前您正在列出这样的表:

FROM quotes q, login_details l,user_details w

哪个“有效”,但执行您无法控制的隐式连接类型。似乎连接类型是INNER JOIN。使用INNER JOIN时要注意的关键是,如果任何给定的表没有匹配的记录,则省略整个结果记录。

相反,听起来你想要更像LEFT OUTER JOIN的东西。其语法更像是:

FROM quotes q
LEFT OUTER JOIN login_details l
  ON q.some_column = l.some_column
LEFT OUTER JOIN user_details w
  ON q.another_column = w.another_column

现在,我不知道您要加入的列,所以我只是将占位符放在那里。但希望你能得到这个想法。这种语法允许您显式地告诉数据库确切地如何连接表格,而不是隐式地让数据库“搞清楚”。

这里关于LEFT OUTER JOIN的关键是,如果正在加入的表中没有匹配的记录,则原始表中的记录仍然包含在内。 (虽然联接表中包含NULL个值。)