脚本:
我有三张table。一个表用于供应商,另一个表用于类别,最后一个表是索引表。
每个供应商都可以选择将在索引器表中注册的多个类别。
indexer\u表上的字段parent\u id用于注册供应商的id,而child\u id用于注册类别的id。还有另一个名为is\ u main的字段,用于检查它是否是供应商的主类别。
我正在处理这个查询,效果非常好。
SELECT
t1.id, t1.name, t1.company, t1.description,
t2.categories, t2.categories_id
FROM supplier_table t1
LEFT JOIN (
SELECT
tin2.parent_id, tin2.child_id, tin2.is_main,
GROUP_CONCAT(tin1.id) AS categories_id,
GROUP_CONCAT(tin1.title) AS categories FROM
(SELECT id, title FROM table_categories WHERE status = 1) tin1
JOIN table_indexer tin2 ON tin2.child_id = tin1.id GROUP BY tin2.parent_id
) t2 ON t1.id = t2.parent_id
WHERE t1.id IN (:id)
基本上,这个查询返回我需要的所有信息。类别的id和名称分别连接在categories和categories\u id字段中,并按供应商id(parent\u id)分组,从而得到以下输出:
Supplier Object
(
[id] => 1
[name] => Supplier Name
[company] => SUpplier Company Name
[description] => Supplier Description Text.
[categories] => Category Example 1,Main Category,Category Example 2
[categories_id] => 6,9,5
)
我需要的是按主描述组的内容。这样,我就知道第一次出现是供应商的主要类别。
Supplier Object
(
[id] => 1
[name] => Supplier Name
[company] => SUpplier Company Name
[description] => Supplier Description Text.
[categories] => Main Category,Category Example 1,Category Example 2
[categories_id] => 9,6,5
)
我试着在一个又一个的小组和其他一些地方下订单,但没有成功。任何帮助都将不胜感激,谢谢。
1条答案
按热度按时间ttcibm8c1#
如果我理解您的意思,您希望对组\u concat结果的内容进行排序,而不是它们所在的行。为此,您需要将订单添加为组concat的一部分。这里是手册。
所以
你想要这样的东西吗
如果希望ids concat与title one的顺序相同,则需要在两个concat上设置相同的排序顺序,并确保它们提供有保证的顺序,可能是通过扩展排序顺序以包含id,如下面所示
你可以用标题作为第二顺序,只要你能保证标题总是不同的。