这是我的问题。
我有一个带有书籍数据库的网站,可以使用预定义的关键字进行搜索。在数据库中,对于每本书,我们最多可以为一本书添加 20 个不同的关键字(如“管理”、“领导力”等),每个关键字都有一个相关值(从 1 到 5)。At this time, when choosing a specific keyword, I'm able to sort all books which have that keyword stored as a theme.
在数据库中,每个关键字有 1 个字段,每个值有 1 个字段,因此 20 个关键字有 40 个字段。
我的问题是,书籍是根据关键字添加到书中的顺序(从第一个到第 20 个)以一种奇怪的方式排序的,相关性值仅逐个字段考虑(第一个关键字与第一个等) .
我想要的是能够像这样对它们进行排序:首先,关键字值为 5 的书籍,然后是 4 等到 1,无论它是为该书添加的第一个关键字还是最后一个关键字。实际上,这实际上意味着“通过相关性”。
我尝试使用“ORDER BY CONCAT”,但它没有改变任何东西。
以下是使用特定关键字的查询示例:
SELECT *,
IF(id_theme_1=13,id_theme_deg_1,0) AS isInDeg_1,
IF(id_theme_2=13,id_theme_deg_2,0) AS isInDeg_2,
IF(id_theme_3=13,id_theme_deg_3,0) AS isInDeg_3,
IF(id_theme_4=13,id_theme_deg_4,0) AS isInDeg_4,
IF(id_theme_5=13,id_theme_deg_5,0) AS isInDeg_5,
IF(id_theme_6=13,id_theme_deg_6,0) AS isInDeg_6,
IF(id_theme_7=13,id_theme_deg_7,0) AS isInDeg_7,
IF(id_theme_8=13,id_theme_deg_8,0) AS isInDeg_8,
IF(id_theme_9=13,id_theme_deg_9,0) AS isInDeg_9,
IF(id_theme_10=13,id_theme_deg_10,0) AS isInDeg_10,
IF(id_theme_11=13,id_theme_deg_11,0) AS isInDeg_11,
IF(id_theme_12=13,id_theme_deg_12,0) AS isInDeg_12,
IF(id_theme_13=13,id_theme_deg_13,0) AS isInDeg_13,
IF(id_theme_14=13,id_theme_deg_14,0) AS isInDeg_14,
IF(id_theme_15=13,id_theme_deg_15,0) AS isInDeg_15,
IF(id_theme_16=13,id_theme_deg_16,0) AS isInDeg_16,
IF(id_theme_17=13,id_theme_deg_17,0) AS isInDeg_17,
IF(id_theme_18=13,id_theme_deg_18,0) AS isInDeg_18,
IF(id_theme_19=13,id_theme_deg_19,0) AS isInDeg_19,
IF(id_theme_20=13,id_theme_deg_20,0) AS isInDeg_20
FROM mng_ouvrages
WHERE lang='fr' AND publish=1
ORDER BY CONCAT(isInDeg_4,isInDeg_2,isInDeg_3,isInDeg_1,isInDeg_5,isInDeg_6,isInDeg_7,isInDeg_8,isInDeg_9,isInDeg_10,
isInDeg_11,isInDeg_12,isInDeg_13,isInDeg_14,isInDeg_15,isInDeg_16,isInDeg_17,isInDeg_18,isInDeg_19,isInDeg_20) DESC
有了这个,我首先得到关键字存储在第 4 个字段(相关性为 3)的书,然后是关键字存储在第一个字段(相关性为 5)的书。
有谁知道是否有办法进行这种排序?
非常感谢您的帮助。