gpt4 book ai didi

php - 在多对一的情况下,如何根据多个 ID 从列中选择唯一值?

转载 作者:行者123 更新时间:2023-11-28 23:23:31 24 4
gpt4 key购买 nike

我正在尝试用 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

遍历所有可用答案并查看它们是否匹配不是首选,因为我不知道将来会设置多少答案/要求。这就是为什么我尝试根据第二个表中显示为 option_ids 的已知产品 ID 检索相应的答案。

查询将使用 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 设置多个查询,以确保一切匹配。

我希望我在这里发布了足够的相关信息,如果没有,请告诉我,以便我提供更多信息。并感谢您提前花时间阅读本文。

最佳答案

不是很优雅,但你可以为每个产品 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 子句 sorted 提供产品 ID,这样:20,30,40 em> 这样:30,20,40 才能正常工作。

SELECT t.answer_id, GROUP_CONCAT(DISTINCT(t.option_id) ORDER BY t.option_id) AS option_ids_found
FROM tickets_answers_options t
WHERE t.option_type = 'product_id'
AND t.option_id in (20,30,40)
GROUP BY t.answer_id
HAVING option_ids_found = '20,30,40'

关于php - 在多对一的情况下,如何根据多个 ID 从列中选择唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40471444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com