【问题标题】:PHP CI sql query syntaxPHP CI sql 查询语法
【发布时间】:2019-12-13 02:54:16
【问题描述】:

我在查询方面需要一些帮助,因为我似乎不明白。

第一桌空缺:

vac_id
vac_title
vac_location
vac_description
is_deleted
status

第二个表vacancies_labels:

vac_id
Label_id

现在我想得到一个包含某个位置内所有空缺的输出,但它们也不能包含 label_id '10' 的位置。

SELECT `v`.*
FROM `vacancies` AS `v`
LEFT JOIN `vacancies_labels` as `vl` ON `v`.`vacancy_id` = `bl`.`vacancy_id`
WHERE `v`.`vac_location` = 'russia'
AND `v`.`is_deleted` != 1
AND `v`.`status` = 1
AND `vl`.`label_id` NOT IN ('10')
GROUP BY `v`.`vacancy_id`

这只会导致 vacancies_labels 表中的记录不是 10 的空缺。但是,它会排除在 vacancies_labels 表中根本没有记录但适合位置范围的所有空缺。

我在这里错过了什么?

谢谢!

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    使用 LEFT JOIN,如果未找到记录,则值将返回 null。但是在你的 WHERE 子句中,你有

    AND `vl`.`label_id` NOT IN ('10')
    

    作为NOT IN doesn't consider nulls,你必须做类似...

    AND ( `vl`.`label_id` NOT IN ('10') OR `vl`.`label_id` IS NULL)
    

    【讨论】:

    • AND (vl.label_id不在 ('10') AND vl.label_id IS NOT NULL) ?现在你在没有 label_id 的时候选择?
    • @splash58 我认为 它忽略了所有没有记录的空缺 意味着当它为空时他们想要记录。
    • 我认为 OP 希望记录有标签。否则,你是对的
    • Nigel 的想法是正确的,并非所有空缺都有标签,但我的代码跳过了它们,因为就像他用空值解释的那样
    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2010-10-29
    • 2018-09-13
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多