我有2个桌子
商品:有关商品的信息。项目具有“常规”或“数字”类型。
id | name | itemtype
CREATE TABLE IF NOT EXISTS `wares` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`itemtype` enum('usual','digital') NOT NULL DEFAULT 'usual',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
INSERT INTO `wares` (`id`, `name`, `itemtype`) VALUES
(1, 'ware1', 'usual'),
(2, 'ware2', 'usual'),
(3, 'ware3', 'usual'),
(4, 'ware4', 'usual'),
(5, 'ware5', 'usual'),
(6, 'ware6', 'digital'),
(7, 'ware7', 'usual'),
(8, 'ware8', 'digital'),
(9, 'ware9', 'usual'),
(10, 'ware10', 'digital');
关系:表与餐具物品之间的关系。某些类型"usual"
为的项目与类型为的项目有关"digital"
。并非所有项目都链接。
id_usualware | id_digitalware
CREATE TABLE IF NOT EXISTS `relations` (
`id_usualware` int(11) NOT NULL,
`id_digitalware` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `relations` (`id_usualware`, `id_digitalware`) VALUES
(1, 6),
(4, 8),
(7, 10);
http://sqlfiddle.com/#!2/2831a/13
我需要使用下面的表关系排序从表商品中选择数据。如果类型的项与item有关系,则此数字项将跟随此结果。我如何使用MySQL做到这一点?"usual"
"digital"
"usual"
id | name | itemtype
1 | ware1 | 'usual'
6 | ware6 | 'digital'
2 | ware2 | 'usual'
3 | ware3 | 'usual'
4 | ware4 | 'usual'
8 | ware8 | 'digital'
5 | ware5 | 'usual'
7 | ware7 | 'usual'
10| ware10| 'digital'
9 | ware9 | 'usual'
以下内容应ids
以正确的顺序获取:
select coalesce(r.id_digitalware, w.id)
from wares w left join
relations r
on r.id_digitalware = w.id
order by coalesce(r.id_usualware, w.id),
(w.itemtype = 'usual') desc;
要获取完整的行,您需要另外一个join
:
select w2.*
from wares w left join
relations r
on r.id_digitalware = w.id left join
wares w2
on w2.id = coalesce(r.id_digitalware, w.id)
order by coalesce(r.id_usualware, w.id),
(w.itemtype = 'usual') desc;
这是SQL Fiddle。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句