簡體   English   中英

ORDER BY-多對多MySQL查詢

[英]ORDER BY - many-to-many MySQL query

我有以下問題:我有“內容”表和“ content_data”表,“內容”表將系統中的主要帖子和對象保留在系統中,“ custom_field”表可用於向帖子中添加任何自定義字段,而“ content_data”表則包含自定義字段值。 簡化的數據庫圖

CREATE TABLE `cms_content` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `cms_content_data` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `custom_field_id` int(11) NOT NULL,
 `value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `content_id` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `key` (`value`,`content_id`,`custom_field_id`) USING BTREE,
 KEY `content_id` (`content_id`),
 KEY `custom_field_id` (`custom_field_id`),
 KEY `value` (`value`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `cms_custom_field` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `name_2` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

現在,我希望能夠按自定義字段值對結果集進行排序。 custom_field.name列和content_data.value列都已建立索引,但這似乎無濟於事,並且查詢非常慢。 當然也會為content_data.custom_field_id編制索引。

這是我的查詢:

SELECT `content`.`id`, `content_data`.`value` AS `title_sort` 
FROM `content` 
INNER JOIN `content_data` ON `content_data`.`content_id` = `content`.`id` 
LEFT JOIN `custom_field` ON `custom_field`.`id` = `content_data`.`custom_field_id`
WHERE `custom_field`.`name` = 'title_sort'
ORDER BY `title_sort`

有什么辦法可以更優化地做到這一點?

在此處輸入圖片說明

先感謝您!

我希望能夠按自定義字段值對結果集進行排序。 custom_field.name列和content_data.value列均已建立索引

您已將content_data.value為要作為排序依據的列。 那是一個varchar(255)列。 真正的'title_sort'是custom_field.name的索引varchar(50)列。

這更接近於您描述的要求:

SELECT 
           `content`.`id`
         , `custom_field`.`name` AS `title_sort`
         , `content_data`.`value`AS whatever_this_is
FROM  `custom_field`
INNER JOIN `content_data`  ON `custom_field`.`id` = `content_data`.`custom_field_id`
INNER JOIN `content` ON `content_data`.`content_id` = `content`.`id`
WHERE `custom_field`.`name` = 'title_sort'
ORDER BY `custom_field`.`name`

但是,您想要的很可能是對content_data的排序。 value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM