我有一个用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,点数,提款,总计,已完成
我们缺少什么? 感谢
答案 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
个值。)