gpt4 book ai didi

php - MySQL ORDER BY FIELD 可以从内部连接表中获取第二个参数吗?

转载 作者:行者123 更新时间:2023-11-29 11:01:10 25 4
gpt4 key购买 nike

我有一张表,其中行是 item_id 和 tag_id。每个item_id都是唯一的自动工具。项目可能有多个tag_id。

我正在尝试像这样对数据进行排序。当用户访问页面时,我捕获 item_id,转到表,按 item_id 获取所有 tag_ids 并尝试返回具有相同 tag_id 的其他 item_ids 。

这是当它返回 items_id 时的问题,它是随机的,首先我需要通过第一个标签获取项目,然后通过其他标签获取项目。这是 SQL 查询。

    SELECT DISTINCT `item_id`, `rel`.`tag_id`
FROM `itv_content_tags_rel` AS `rel`
INNER JOIN ( SELECT `tag_id`
FROM `itv_content_tags_rel`
WHERE `item_id` = 65736
)
AS kk ON kk.`tag_id` = `rel`.`tag_id`
ORDER BY FIELD(`rel`.`tag_id`, 'rel.tag_id')

ORDER BY FIELD 行不起作用,[她是我通过 Whis 查询得到的表。][1]

当我改变时
按字段排序(rel.tag_id, 'rel.tag_id')
通过

ORDER BY FIELD(`rel`.`tag_id`, '3788') DESC

一切正常[我已排序表格][2]

有什么解决办法吗?

编辑:

这是我在蒂姆编辑后得到的表格。 Tim's query是否也可以像这样使用 item_id 进行排序? First sorted with tag_id then time_id

最佳答案

添加 FIELD 似乎解决了问题的原因是,它将 3788 ID 放在第一位,然后是其他所有内容,而巧合的是,它恰好是另一个 ID 。如果您想对 tag_id 列进行数字排序,那么您只需使用 ORDER BY 并将该列转换为数字:

SELECT DISTINCT item_id, rel.tag_id
FROM itv_content_tags_rel AS rel
INNER JOIN
(
SELECT tag_id
FROM itv_content_tags_rel
WHERE item_id = 65736
) AS kk
ON kk.tag_id = rel.tag_id
ORDER BY CAST(rel.tag_id AS UNSIGNED)

请注意,如果您计划 tag_id 始终仅包含数字,则可以考虑将此列的类型切换为数字类型,以便避免在查询中进行此类强制转换。

更新:如果您还想使用item_id进行排序,那么只需向ORDER BY添加另一个级别,即如下所示:

ORDER BY CAST(rel.tag_id AS UNSIGNED),
CAST(rel.item_id AS UNSIGNED)

关于php - MySQL ORDER BY FIELD 可以从内部连接表中获取第二个参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222933/

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