我需要检索另一个表中不存在的值。我正在使用Shares
和Share_types
表格。
目前,我使用PHP,但我总是在Share_types
的2,500行中循环,我认为可以通过查询来解决行数。
用户目前正在执行此过程:
Anual share
2016
2016
尚未生成的年份。这意味着,2016
背后的年代如果不存在,也会产生。那就是说,我的PHP代码如下:
// Retrieves always the 2,500~ rows
$listOfShareTypes = "SELECT user_id, date_start FROM share_types WHERE type = 'Anual share'";
foreach($listOfShareTypes as $type)
{
// Now is where I validate if the share already exists
$hasShare = "SELECT COUNT(*) FROM shares WHERE the_year = $yearSelectedByUser, user_id = $type->user_id, share_type_id = $type->id";
if($hasShare == TRUE)
continue;
else
// Create the share..
}
通常情况下,要通过查询检索另一个表中不存在的结果,我会在查询中执行两次select
,但经过几次搜索后,它指向使用{{1} }。但是我不知道如何完成这个,因为我需要匹配几个字段(user_id,share_type_id,year等)
查看我在 SQLFiddle 上创建的示例,结果应为:
LEFT JOIN
使用此结果并且由于用户选择(5, 3, 'Anual', '2015-06-28')
年,我应该从2016
循环(以PHP为单位)直到2015
。
答案 0 :(得分:2)
您在join
条件中使用了错误的列。表格应加在user_id
上。
SELECT stype.id, stype.user_id, stype.type, stype.date_start
FROM share_types AS stype
LEFT JOIN shares AS share ON share.user_id = stype.user_id
WHERE share.share_type_id IS NULL
答案 1 :(得分:0)
尝试此查询
SELECT user_id, date_start FROM share_types st,shares sh on sh.share_type_id=st.user_id WHERE type = 'Anual share' and sh.user_id=st.id and sh.the_year=$yearSelectedByUser and Having COUNT(sh.user_id) < 1;