我试图弄清楚一些事情,但并不顺利。 我有 1 个数据库和两个表。
表 1:用户 表 2:已投票
表1有:userid 表2有:votemyid和votevotedid
第二个与 userid 相同,如果该值作为投票表中的 votevotedid 存在,我如何确保它不会从用户中选择值?
到目前为止,我的 SQL 代码是:
$result = mysql_query("SELECT *, ( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(lat)) ) ) AS distance count(*) FROM users,voted WHERE voted.votevotedid not in (select users.userid from users) HAVING distance < $distance ORDER BY RAND() LIMIT 1");
我可以这样做,然后对投票的数据库执行第二个 mysql_query,但是这样就太多了
最佳答案
方法是使用 LEFT JOIN:
SELECT u.userid
FROM Users AS u
LEFT JOIN Voted AS v ON u.userid = v.votevotedid
WHERE v.votemyid IS NULL
LEFT JOIN 所做的返回所有用户记录并与投票表匹配并排除投票表返回匹配记录的记录(通过使用 v.votemyid IS NULL)
如果没有看到确切的表结构,我不确定你的 SQL,但它应该类似于使用 LEFT JOIN。
$result = mysql_query("SELECT u.*, ( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(lat)) ) ) AS distance
FROM users AS u
LEFT JOIN voted AS v ON users.userid = v.votevotedid
WHERE v.votemyid IS NULL
HAVING u.distance < $distance
ORDER BY RAND()
LIMIT 1");
关于php - 如果其他表中不存在,则从 mysql 中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22174227/