我试图找出一些东西,但它并没有真正顺利。 我有一个带有两个表的数据库。
表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,但是这样做很多
答案 0 :(得分:1)
该方法使用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");
答案 1 :(得分:0)
尝试添加以下内容:
WHERE userid NOT IN (SELECT DISTINCT(votevoteid) FROM voted)
AND votevoteid=userid
答案 2 :(得分:0)
我尝试解释一下,我有两个数据库表,一个用户返回用户ID和gps位置。
有一张表投票,这些人已经投票了。 我的基本查询工作正常,但它一直让我已经投票的人回归。
所以它需要做的是检查投票表,我的投票,看看被选中的人是否已经存在于我的id的投票表中,如果是这样,它将跳过它。
原始查询:
$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 HAVING distance < $distance ORDER BY RAND() LIMIT 1");
更改为:
$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 userid NOT IN (SELECT DISTINCT(votevoteid) FROM voted WHERE votemyid = '$me') AND votevoteid=userid HAVING distance < $distance ORDER BY RAND() LIMIT 1");
给我一个内部服务器错误
答案 3 :(得分:0)
select * from users where userid not in (select votevotedid from votevotedid )
答案 4 :(得分:0)
这似乎有效
$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 FROM users AS u LEFT JOIN voted AS v ON u.userid = v.votevotedid WHERE v.votemyid != '1' HAVING distance < $distance ORDER BY RAND() LIMIT 1");
当我将'votemyid'更改为数字2(换句话说,用户ID 2在用户ID 1上投票)时,它会显示给我(作为用户ID 1)
没关系,不行。
如果投票表中没有人,它也不会返回任何内容
当我添加:
WHERE v.votemyid IS NULL
表中还有其他人,比方说:用户ID 1投票给用户ID 1,i(id 1)获得o结果