我是新来这里发布问题的,但很久以前我就一直在寻找答案。尽管如此,我现在正在努力做的是,我没有找到正确的解决方案,或者如果我找到了,我只是不知道如何使用它。
这是我的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";
我试图选择一个随机的链接id(wich有点),并通过查看第二个表来检查该链接今天是否已全部显示给用户,在第二个表格中,所有链接id都保存为带有用户id和上次访问时间的SLINK 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 links 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;