使用 PHP 中的多个条件访问嵌套 MySQL Select。

Accessing nested MySQL Select with multiple conditions in PHP.

我想 select 来自一个 table 符合特定条件的数据,然后 select 来自另一个 table 的数据,基于我刚刚 selected,并能够从两个 table 中查看 select 离子。我尝试使用嵌套 select:

$query = 
"
SELECT 
    `url`, `userID`, `likes`, `time`, `latitude`, `longitude`, `distance `,
    (SELECT `up` from userHistory WHERE userHistory.url = photoList.url AND userHistory.userID = photoList.userID)
FROM 
    photoList 
WHERE 
    `valid` = '1' AND `time` > '$validTime' AND `likes` > '-6' 
HAVING 
    `distance` < '1'
ORDER BY 
    `time` DESC 
LIMIT 
    '0' , '200'";

基本上我想 select photoList 中的一个对象...然后在 userHistory 中执行 select 匹配 url 和 selected 中的 userID照片列表行。我想 select 这两个,这样当我在 PHP 中循环时,我可以执行以下操作:

while ($row = $result->fetch_assoc()){
        $storeObjects[] = array("url" => $row["url"], "userID" => $row["userID"],
        "latitude" => $row["latitude"], "longitude" => $row["longitude"],
        "likes" => $row["likes"],
        "time" => $row["time"], "distance" => $row["distance"], 
        "userLiked" => $row["up"]); //$row["up"] is ALWAYS NULL
}

在上面的循环中,$row["up"]始终为NULL,而该行中的其他类别为期望值。我想知道 $row["up"] 是否是访问子查询 selected 数据的正确方法。

您可以JOIN 2 个表格如下:

SELECT p.`url`, p.`userID`, p.`likes`, p.`time`, p.`latitude`,
p.`longitude`, p.`distance`, u.`up`
FROM photoList p
JOIN userHistory u
ON u.`url` = p.`url`
AND u.`userID` = p.`userID`
WHERE p.`valid` = '1'
AND p.`time` > '$validTime'
AND p.`likes` > '-6' 
HAVING p.`distance` < '1'
ORDER BY p.`time` DESC
LIMIT 0, 200

您可以使用 NATURAL JOIN 连接两个具有共同属性的表,如下所示:

SELECT url, userID, likes, time, latitude, longitude, distance, up
FROM photoList
NATURAL JOIN userHistory
WHERE valid = 1 AND time > '$validTime' AND likes > -6 AND distance < 1
ORDER BY time DESC
LIMIT 0, 200