[英]Mysql two tables, select all values from one table, compare if exists and then return One random value
我是發布問題的新手,但是很久以前我一直在尋找答案。 仍然是我現在想做的事情,找不到合適的解決方案,或者如果找到它,我只是不知道如何使用它。
這是我的SQL查詢:
$sql = "SELECT * FROM table_links AS link_id WHERE link_points > '1'
AND NOT EXISTS (SELECT * FROM table_surf AS slink_id WHERE user_id = '$user'
AND surf_time = '$time') ORDER by RAND() LIMIT 1";
我試圖選擇一個隨機的LINK ID(夾點),並通過查看第二張表(該表將所有LINK ID都保存為SLINK ID以及用戶ID和最后一次的時間)來檢查該鏈接是否今天已顯示給用戶訪問。
如果最后一次訪問是今天( $time
),則它不應返回任何內容。
我是PHP / mysql的新手,但是我正在嘗試學習,但是在這種情況下,我仍然不確定是否可以實現像這樣的復雜查詢。
更新:根據Akhil的帖子,這似乎對我有用-
$ sql =“ SELECT * FROM(SELECT RAND()temp,link_id FROM table_links WHERE link_points>'1'AND link_status NOT IN('spam')AND NOT EXISTS(SELECT slink_id FROM table_surf AS鏈接WHERE user_id ='$ user'AND surf_time ='$ time'AND slink_id ='$ surflink'))通過溫度限制1進行訂購”;
使用子查詢
$sql = "select * from (SELECT RAND() temp, table_links.* FROM table_links AS link_id WHERE link_points > '1'
AND NOT EXISTS (SELECT * FROM table_surf AS slink_id WHERE user_id = '$user'
AND surf_time = '$time')) a ORDER by temp LIMIT 1";
看看是否能解決您的問題
如果您的鏈接ID列在表table_links
稱為my_link_id,則使用NOT IN
像這樣
$sql = "SELECT * FROM table_links AS link_id WHERE link_points > '1' AND link_id.my_link_id NOT IN (SELECT * FROM table_surf AS slink_id WHERE user_id = '$user' AND surf_time = '$time') ORDER by RAND() LIMIT 1";
$sql = "SELECT * FROM table_link1
WHERE id IN (SELECT id FROM table_link2) ORDER BY RAND()" LIMIT 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.