我已尽力解释我的问题。请仔细回答我的问题,以了解我想要实现的目标。
我正在尝试在MySQL的同一列中搜索多个值。我在此操作中使用了以下4个表:
联系人:
数据值:
数据字段:
data_cats_options:
在我的网站前端,过滤器(用于搜索所需数据的表单元素)如下所示:
单个下拉(国家/地区)搜索:
要获取“国家/地区”为“印度”的所有名称为“ Sachin”的联系人,我使用以下查询:
SELECT `c`.*
FROM `contacts` AS `c` JOIN `data_values` AS `dv`
ON `c`.`contact_id` = `dv`.`contact_id`
JOIN `data_fields` AS `df` ON
`dv`.`field_id` = `df`.`field_id`
JOIN `data_cats_options` AS `dco` ON
`dv`.`field_val` = `dco`.`val_id`
WHERE `c`.`contact_name` = "Sachin" AND `dv`.`field_id` = 153 AND `dco`.`val_id` = 224
类似地,我们可以为会计“工作”下拉菜单的所有“萨钦”做事。
问题
我真的不知道如何搜索多个数据,例如如何使用“国家/地区”为“印度”且“工作”为“会计”的“ Sachin”获取所有联系人。尽管数据库中存在数据,但以下SQL没有任何结果:
SELECT `c`.*
FROM `contacts` AS `c` JOIN `data_values` AS `dv`
ON `c`.`contact_id` = `dv`.`contact_id`
JOIN `data_fields` AS `df` ON
`dv`.`field_id` = `df`.`field_id`
JOIN `data_cats_options` AS `dco` ON
`dv`.`field_val` = `dco`.`val_id`
WHERE `c`.`contact_name` = "Sachin" AND `dv`.`field_id` = 153 AND `dco`.`val_id` = 224
AND `dv`.`field_id` = 154 AND `dco`.`val_id` = 227
我主要关心的是上面查询的这一特定部分:
AND `dv`.`field_id` = 153 AND `dco`.`val_id` = 224
AND `dv`.`field_id` = 154 AND `dco`.`val_id` = 227
那么我们如何在此JOIN的同一列中搜索多个数据?
我真的想获取同时满足两个下拉选项的所有记录。
请帮助我。预先感谢。
答案 0 :(得分:0)
这似乎是一个糟糕的设计,因为我们必须添加其他联接。
finish_thing()
我仍在考虑其他选择,但需要做点其他事情。
也许...将根据要搜索的field_ID的数量动态设置2;您知道这是因为您有field_ID ...
SELECT c.*
FROM contacts AS c
JOIN data_values AS dv
ON c.contact_id = dv.contact_id
JOIN data_fields AS df
ON dv.field_id = df.field_id
JOIN data_cats_options AS dco
ON dv.field_val = dco.val_id
JOIN data_values AS dv2
ON c.contact_id = dv2.contact_id
JOIN data_fields AS df2
ON dv2.field_id = df2.field_id
JOIN data_cats_options AS dco2
ON dv2.field_val = dco2.val_id
WHERE c.contact_name = "Sachin"
AND dv.field_id = 153 AND dco.val_id = 224
AND dv2.field_id = 154 AND dco2.val_id = 227
为什么行得通?因为我们知道如果两个匹配都发生,那么如果每个contact_ID不存在,我们将获得2条记录,而我们只会获得1条记录。因此拥有让我们限制了期望的方式。
或者我们可以使用 HAVING COUNT()=(从data_Fields中选择count(),其中('153','154')中的field_ID)