我有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"。并非所有项目都链接。
"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"
"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以正确的顺序获取:
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:
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。