簡體   English   中英

如果其他表中不存在該值,則從mysql檢索值

[英]Retrieve value from mysql if it does not exist in other table

我試圖找出一些東西,但實際上並不能很好地進行。 我有兩個表的1個數據庫。

表1:用戶表2:投票

表1具有:userid表2具有:表決myid和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");

嘗試添加以下內容:

WHERE userid NOT IN (SELECT DISTINCT(votevoteid) FROM voted)
AND votevoteid=userid
select * from users where userid not in (select votevotedid from votevotedid )

這似乎有效

$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

表格中還有其他人,比如說:userid 1對userid1進行了投票,我(id 1)獲得了o結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM