如何解决根据条件SQL连接两个表
我正在构建使用地理位置的android应用。我正在尝试改善整体应用程序,以提高运行时的平滑度。我正在使用volly连接到我的网络服务器上的php页面,然后该php页面可以访问我的phpmyadmin数据库。我的用于更新位置的php页面一团糟,我希望可以使用正确的sql查询将其修复。
让我们开始吧。
和一个名为friends的表
在这个特定的例子中,大卫是马克和杰克的朋友。另外要弄清楚马克和杰克是大卫的朋友。
我需要做的是编写一个查询,如果给定用户ID,例如说3,它将生成该人及其朋友ID,cordsV1,cordsV2的表,而该表中没有任何重复的ID。
我能够使用循环和变量ect来使它工作,但是正如我所说的那样,这是一个可怕的烂摊子。
这是我目前所有的SQL查询尝试:
SELECT DISTINCT ID,cordsV1,cordsV2 FROM `friends`,`users` WHERE user_one_ID = 1 AND status = 1;
但是,这只会返回用户表中的所有用户ID。我对sql真的很不好,所以如果有人能指出正确的方向,那将不胜感激。
如果您想知道的话,这是我可怕的代码:
<?php error_reporting(E_ALL | E_STRICT); ?>
<?php
$THIS_USER_ID = $_GET['THIS_USER_ID'];
try {
$one = 1;
$db = new PDO("");
$sql = "SELECT * FROM friends WHERE user_one_ID = '" . $THIS_USER_ID . "' AND status = '" . $one . "' OR user_two_ID = '" . $THIS_USER_ID . "' AND status = '" . $one . "'";
$rows = $db->query($sql)
->fetchAll(PDO::FETCH_ASSOC);
$printMe = [];
foreach($rows as $row){
$printMe[] = $row;
}
$jsonArr = json_encode($printMe);
$characters = json_decode($jsonArr,true);
// Getting the size of the sample array
$size = sizeof($characters);
$neg = -1;
$sql2 = "SELECT * FROM users WHERE ID = '" . $neg . "'";
$sql3 = "";
$sql4 = "";
for ($x = 0; $x < $size; $x++ ){
if ($characters[$x]['user_one_ID'] == $THIS_USER_ID && $characters[$x]['status'] == 1){
$hold = $characters[$x]['user_two_ID'];
$sql3 = $sql3 . " OR ID = '" . $hold . "'";
} else if($characters[$x]['user_two_ID'] == $THIS_USER_ID && $characters[$x]['status'] == 1) {
$hold = $characters[$x]['user_one_ID'];
$sql4 = $sql4 . " OR ID = '" . $hold . "'";
}
}
$sql5 = $sql2 . $sql3 . $sql4;
$sql7 = "SELECT * FROM users WHERE ID = '" . $THIS_USER_ID . "'";
$printMe2 = [];
$rows3 = $db->query($sql7)
->fetchAll(PDO::FETCH_ASSOC);
foreach($rows3 as $row3){
$printMe2[] = $row3;
}
$rows2 = $db->query($sql5)
->fetchAll(PDO::FETCH_ASSOC);
foreach($rows2 as $row2){
$printMe2[] = $row2;
}
$jsonArr2 = json_encode($printMe2);
echo $jsonArr2;
$db = null;
} catch(PDOException $ex) {
die(json_encode(array('outcome' => false,'message' => 'Unable to connect')));
}
?>
解决方法
获取用户数据
SELECT
*
FROM
users
WHERE ID = ?
获取朋友的用户数据
SELECT
users.*
FROM
friends
JOIN
users ON users.ID = friends.user_two_ID
WHERE
friends.user_one_ID = ?
最好使用prepared statements,否则由于SQL-Injections,您的应用将无法正常运行。
您还想看看meaningful names。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。