我正在尝试编写一个MySQLi语句,我想从名为(url
)的表中检索一个随机列(questions
)。但是,我不想要任何随机url
。此语句将取决于涉及另一个名为tracking
的表的三个条件。 tracking
包含三列(user_id
,q_id
,answer
)。所以最终我想要检索用户尚未回答的所有urls
。例如,如果用户已经回答了问题,那么tracking
就会出现这样的问题:user_id: 2
q_id: 2
answer: 1
现在,当我们运行此语句时,q_id: 2
不应该是随机urls
之一。指出q_id
也是questions
的主键也很重要。
我已经尝试过这个陈述,但由于某种原因它无法运作:
$values = $db->query("
SELECT url
FROM questions
LEFT
JOIN tracking
ON tracking.user_id = '$id'
AND questions.q_id != tracking.q_id
AND tracking.answer != NULL
ORDER
BY rand() LIMIT 1
");
除了用户已经回答的问题之外,如何检索随机url
?
答案 0 :(得分:2)
你尝试加入一个不等于,所以你最终会得到一个1:n的连接,这是行不通的。 (不是在这种情况下)。
尝试这样的事情:
SELECT url FROM questions WHERE q_id NOT IN
(SELECT q_id FROM tracking WHERE user_id = $id
AND answer IS NOT NULL)
ORDER BY rand() LIMIT 1
这不是将变量插入Query的保存方式,请查看预处理语句: http://www.w3schools.com/php/php_mysql_prepared_statements.asp