Php 查询以检索表之间不存在的值

Php 查询以检索表之间不存在的值,php,mysql,sql,Php,Mysql,Sql,我需要检索其他表中不存在的值。我正在使用共享和共享类型表 目前,我使用PHP实现了这一点,但我总是在2500行Share_类型上循环,我认为可以通过查询解决行数问题 用户当前正在经历以下过程: 选择共享类型-年度共享 选择将提取的年份-2016年 代码将生成2016年之前尚未生成的所有股份。这意味着,如果它们不存在,2016年之后的年份也将产生。 也就是说,我的PHP代码如下所示: // Retrieves always the 2,500~ rows $listOfShareTypes = "

我需要检索其他表中不存在的值。我正在使用共享和共享类型表

目前,我使用PHP实现了这一点,但我总是在2500行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。但是,我不知道如何实现这一点,因为我需要匹配几个字段user\u id、share\u type\u id、year等等

看看我创建的这个示例,结果应该是:

(5, 3, 'Anual', '2015-06-28')

根据这个结果,并且由于用户选择了2016年,我应该从2015年到2016年循环使用PHP。

您在连接条件中使用了错误的列。应根据用户id连接这些表

请尝试此查询

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;

我接受了你的回答,但现在我面临另一个问题,如果用户选择“2017”,它应该检索所有行,在本例中,检索所有5行,因为它尚未添加到共享中。你有任何线索如何通过查询做到这一点吗?你能添加一些样本数据到小提琴,并显示所需的结果吗?
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;