gpt4 book ai didi

mysql - ORDER BY - 多对多 MySQL 查询

转载 作者:行者123 更新时间:2023-11-30 21:51:03 25 4
gpt4 key购买 nike

我有以下问题:我有'content'表,它保留系统中的主要帖子和对象,'custom_field'表,它允许使用将任何自定义字段添加到帖子和'content_data'表,它保存自定义字段值。 Simplified database diagram

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`

有没有办法以更优化的方式做到这一点?

enter image description here

提前致谢!

最佳答案

I want to be able to ORDER result set BY custom field value. Both custom_field.name column and content_data.value column are indexed

您已授权 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 的排序。

关于mysql - ORDER BY - 多对多 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47244197/

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