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

时间:2014-03-04 14:09:49

标签: php mysql sql

我试图找出一些东西,但它并没有真正顺利。 我有一个带有两个表的数据库。

表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,但是这样做很多

5 个答案:

答案 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结果