简体   繁体   English

MySQL的两个表,从一个表中选择所有值,比较是否存在,然后返回一个随机值

[英]Mysql two tables, select all values from one table, compare if exists and then return One random value

I'm new here as for posting questions, but I've been looking for answers since long time ago. 我是发布问题的新手,但是很久以前我一直在寻找答案。 Still what I'm trying to do now I didn't found for the right solution or I just didn't know how to use it if I did found it. 仍然是我现在想做的事情,找不到合适的解决方案,或者如果找到它,我只是不知道如何使用它。

Here's my SQL query: 这是我的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";

I'm trying to select a random LINK id (wich has points) and check if that link was allready shown to a user today by looking into the 2nd table where all LINK ID's are saved as SLINK ID's with user ID's and time of the last visits. 我试图选择一个随机的LINK ID(夹点),并通过查看第二张表(该表将所有LINK ID都保存为SLINK ID以及用户ID和最后一次的时间)来检查该链接是否今天已显示给用户访问。

If last visit was today ( $time ) then it should not return anything. 如果最后一次访问是今天( $time ),则它不应返回任何内容。

I'm new to PHP/mysql but I'm trying to learn, still this is a situation where I'm not sure if it is even possible to realise a complex query like this one. 我是PHP / mysql的新手,但是我正在尝试学习,但是在这种情况下,我仍然不确定是否可以实现像这样的复杂查询。

UPDATE: Based on Akhil post this is what seems to work for me - 更新:根据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')) a ORDER by temp LIMIT 1"; $ 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进行订购”;

Use a sub query 使用子查询

$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";

See if it solves your problem 看看是否能解决您的问题

如果您的链接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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM