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

时间:2017-02-14 09:56:22

标签: php mysql

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

我正在尝试将数据排序为这样。当用户访问页面时,我抓住item_id,转到表格,按item_id获取所有tag_ids,并尝试返回其他具有相同tag_id的item_id。

这是问题,当它返回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行无法正常工作,[她的表格是我查询过的。] [1]

当我改变时 ORDER BY FIELD( {的rel {1}} {TAG_ID {1}}
通过

.

一切都很完美[我有分类表] [2]

这是解决方案吗?

编辑:

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

1 个答案:

答案 0 :(得分:1)

添加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)