我试图在PHP中创建一个系统,我可以根据订单中的信息和这些答案的要求发送自动答案。例如,如果客户的产品订单中包含product_id 20,30和40。我希望能够为其中一个答案设置一个要求,检查它是否匹配,然后发出相应的答案。
目前有两个表,一个用于消息本身,另一个用于链接到这些消息的要求。
tickets_answers
id name message
1 Test 1 This is the first test message.
2 Test 2 Another test message
tickets_answers_options
id answer_id option_type option_id
1 1 product_id 20
2 1 product_id 30
3 1 product_id 40
4 2 product_id 25
5 2 product_id 30
循环查看所有可用答案并查看它们是否匹配不是首选,因为我不知道将来会设置多少答案/要求。这就是为什么我尝试根据第二个表中显示的已知产品ID检索相应的答案为option_ids。
查询将使用PHP构建。我很可能会根据订单本身的信息进行内爆或构建查询。我现在只是试着整理SQL部分。
我已尝试以下查询来检索answer_id
SELECT answer_id
FROM tickets_answers_options
WHERE option_id IN (SELECT option_id
FROM tickets_answers_options
WHERE option_type = 'product_id'
AND option_id = 20
OR option_id = 30
OR option_id = 40)
GROUP BY answer_id
这导致了我想要的东西。此查询返回answer_ids
1
2
在这种情况下,弹出2,因为它与子查询中提到的option_id之一匹配。
我想要的结果是获得与option_ids匹配的单个answer_id。 我看到这可能有点落后于我如何为这个特定系统设置结构。但是将来会有多个option_types来检查。现在我试图只检查product_id,在PHP中我可以为不同的option_types设置多个查询,所以确保一切都匹配。
我希望我在这里发布足够的相关信息,如果没有,请告诉我,以便提供更多信息。并且感谢您提前了解这一点。
答案 0 :(得分:1)
不是很优雅,但您可以为每个产品ID构建一个子查询并加入所有这些子查询:
SELECT a.answer_id
FROM (SELECT t.answer_id
FROM tickets_answers_options t
WHERE t.option_type = 'product_id'
AND t.option_id = 20) as a
JOIN (SELECT t.answer_id
FROM tickets_answers_options t
WHERE t.option_type = 'product_id'
AND t.option_id = 30) as b
ON a.answer_id = b.answer_id
JOIN (SELECT t.answer_id
FROM tickets_answers_options t
WHERE t.option_type = 'product_id'
AND t.option_id = 40) as c
ON a.answer_id = c.answer_id
修改强>
上面的选项可以创建相当多的子查询。 这是另一种可能具有更好性能并且更优雅的选择。
请注意,您始终需要为其提供HAVING子句已排序的产品ID,这样:20,30,40
和不这样:{{ 1}}让它发挥作用。
30,20,40