我需要检索其他表中不存在的值。我正在处理Shares
和Share_types
表。
目前,我使用php处理这个问题,但我总是在Share_types
的2500行上循环,我认为可以用一个查询来解决行数问题。
用户当前正在经历此过程:
选择共享类型-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
,但在几次搜索之后,它会指向LEFT JOIN
的用法。但是,我不知道如何实现这一点,因为我需要匹配几个字段(用户id、共享类型id、年份等)。看看我在SQLFiddle上创建的这个示例,结果应该是:
(5, 3, 'Anual', '2015-06-28')
有了这个结果,并且由于用户选择了
2016
的年份,我应该循环(在php中)从2015
到2016
。 最佳答案
您在join
条件下使用了错误的列。表应该在user_id
上连接。
SQL Fiddle
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