2012-02-20 112 views
1

嗨,我想通过逗号分隔值来订购我的数据库,但它似乎并没有为我工作正常。这里是我的MySQL查询。ORDER BY mysql逗号分隔值

SELECT * 
FROM wp_posts 
LEFT JOIN wp_postmeta ON wp_posts.ID=wp_postmeta.post_id 
LEFT JOIN wp_term_relationships ON wp_posts.ID=wp_term_relationships.object_id 
LEFT JOIN wp_term_taxonomy ON wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_id 
LEFT JOIN wp_terms ON wp_term_taxonomy.term_id=wp_terms.term_id 
WHERE wp_terms.name = 'Dimmers' 
AND meta_key = 'feature_number_of_channels' 
GROUP BY wp_posts.ID 
ORDER BY meta_value ASC 

这里是截图。 enter image description here 正如你可以从屏幕截图中看到的,他们似乎没有正确地工作任何帮助,请如何正确地订购这些ASC?

我寻找正确的顺序是这样的最高出所有的人都那么ASC这样

24,48 - 4,6,12,24 - 12 - 6 - 6 - 3

+1

什么是预期的正确顺序? – 2012-02-20 18:16:27

+0

目前尚不清楚“正确”的顺序是什么。你能否提供一个正确的屏幕截图中的数据排序样本? – 2012-02-20 18:16:48

+0

您正在通过发布的代码中的'object_id ASC'进行订购。你想把它改为'meta_value'吗? – 2012-02-20 18:17:33

回答

3

变化您ORDER BY看字符串的整数值:

ORDER BY CONVERT(SUBSTRING_INDEX(meta_value, ',', -1), SIGNED) DESC 

下面是一个例子:

SELECT "24,38" AS meta_value UNION 
SELECT 1 AS meta_value UNION 
SELECT 30 AS meta_value 
ORDER BY CONVERT(SUBSTRING_INDEX(meta_value, ',', -1), SIGNED) DESC 

个回报:

Rows = 3 
meta_value 
24,38 
30 
3 

祝你好运!

+0

看起来您的逗号分隔值在最后排序时最高 - 您可以提取该值,并使用上述方法将其转换为整数。 – Mikhail 2012-02-20 18:31:12

+0

这适用于我thankyou;) – DCHP 2012-02-20 18:33:08

+0

只要最高值始终是最后一个值,这工作。但是,如果最高的号码在中间,它将会失败。如果这也发生在您的数据中,那么您将不得不编写一个存储过程,该过程根据字符串返回最高数字。 – Chris 2012-02-20 18:36:36

0

使用订单table.field由于加入的表格太多,ASC可能会对您有所帮助。这样服务器就可以从一张表中得到确切的顺序。