基于交替表查询的SQL查询表

时间:2019-01-19 17:37:41

标签: php mysql

我目前正在尝试在与特定用户相关联的表中返回所有结果(使用会话变量标识该用户,该部分正在工作),然后将这些结果中的每一个传递给另一个表,将结果打印给用户。

当前,我的系统正在运行,但是它仅处理第二个查询中原始查询的第一个结果,而不是第一个查询的每个结果。

我当前的代码:

<?php
$conn = new mysqli("localhost", "root", "", "tcom");

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$uid = $_SESSION['userID'];
$sql = "SELECT * FROM core_apps_owned WHERE UserID = $uid";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $app = $row["AppID"];
        $sql = "SELECT * FROM core_apps WHERE AppID = $app";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while($row = $result->fetch_assoc()) {
                echo "<li>".$row["icon"]."</li>";
            }
        } else {
            echo "Error Unable to find app $app";
        }
    }
} else {
    echo "No Owned Apps!";
}
$conn->close();
?>

我还应该提到我的名字很差,而且我通过root连接时的安全性也很差,可维护性也很差,但是,一旦我的系统正常工作,所有这些都将得到修复。

这些是我的桌子:

core_apps_owned:

UserID | AppID
-------+-------
  4    |  3
  7    |  9
  4    |  9
  4    |  2

core_apps:

AppID | name     | icon
------+----------+------
  3   | TestApp3 |   3 
  9   | TestApp9 |   9

2 个答案:

答案 0 :(得分:0)

您要覆盖$result变量。只需使用其他变量,就可以了:

$app = $row["AppID"];
$sqlApp = "SELECT * FROM core_apps WHERE AppID = $app";
$resultApp = $conn->query($sqlApp);

答案 1 :(得分:-1)

您已使用SQL查询声明了一个变量,并且必须从中获取数据,在同一块语句中,您声明了一个具有相同名称的新变量,第一个结果中的包含将被结果查询替换在第二个查询中,这是不正确的,您应该使用不同的变量名来保存第一个结果