繁体   English   中英

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

[英]Accessing nested MySQL Select with multiple conditions in PHP.

我想从一个符合特定条件的表中选择数据,然后根据我刚刚选择的数据的条件从另一个表中选择数据,并能够查看两个表中的选择。 我尝试使用嵌套选择:

$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'";

基本上,我想在photoList中选择一个对象...,然后在userHistory中进行选择,以匹配所选photoList行中的url和userID。 我想选择这两个选项,以便在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”]是否是访问子查询选择的数据的正确方法。

您可以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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM