php - 如果其他表中不存在,则从 mysql 中检索值

标签 php mysql sql

我试图弄清楚一些事情,但并不顺利。 我有 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/

相关文章:

php - 不做前端开发需要安装 `fxp/composer-asset-plugin`吗

php - 使用 PHP GD 展平多个透明 PNG

mysql - SQL 检索重复租赁

php - 仅当姓氏不唯一时才显示名字

javascript - 自定义 Stripe 结账按钮无法在移动设备上使用

php - mysql_query 求和结果

MySQL 区分大小写(或者,如何在 MySQL 中正确存储密码)

mysql - 如何在 MySQL 中保留行计数器

sql - SQL计算总体成功率: Recursive CTE or Alternative Approach?

SQL Server - 基于周数和年份的星期一日期( View )