【问题标题】:Joining two tables based off a condition SQL根据条件 SQL 连接两个表
【发布时间】:2020-08-12 02:31:43
【问题描述】:

我正在构建一个使用地理位置的 android 应用程序。我正在尝试改进我的整体应用程序,以提高其运行时的流畅度。我正在使用 volly 连接到我的网络服务器上的 php 页面,然后该 php 页面可以访问我的 phpmyadmin 数据库。我用于更新位置的 php 页面一团糟,我希望可以通过正确的 sql 查询来修复它。

让我们开始吧。

所以我有一个名为 users 的表

还有一张名为friends的表

在这个特定的例子中,大卫是马克和杰克的朋友。还要澄清一下,马克和杰克是大卫的朋友。

如果给定一个用户 ID,例如 3,我需要编写一个查询,该查询将生成该人及其朋友 ID、cordsV1、cordsV2 的表格,表格中没有任何重复的 ID。

我能够使用循环和变量等来解决这个问题,但正如我所说,这是一个可怕的混乱。

这是我当前的所有 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')));
}
?>

【问题讨论】:

标签: php mysql mariadb


【解决方案1】:

获取用户数据

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

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2020-12-02
    • 1970-01-01
    相关资源
    最近更新 更多