MySQL从起始值开始排序

时间:2013-01-16 12:37:54

标签: mysql sql select sql-order-by

在产品页面上,我有一个下拉列表,其中列出了与产品页面关联的当前颜色选项。

在此示例中,产品页面SKU为250E,可在以下位置找到:

GREEN
BLACK

如果客户选择GREEN,那么我想运行一个MySQL命令,该命令将根据下面显示的custom_order值更改数据以显示GREEN值。

起始值应该覆盖其他数据项,然后它应该保留custom_order值。 custom_order字段包含字母c1,c2(它们将始终位于底部)

Colour Table
============
ID      COLOURID        NAME
-------------------------------------
2           5           BLACK
3           6           GREEN


Product Table
=============
ID      SKU         PICTURE URL             COLOURID            CUSTOM_ORDER        
-----------------------------------------------------------------
22      250E        cdn_hash_1.jpg          5                   1
23      250E        cdn_hash_2.jpg          5                   2
24      250E        cdn_hash_3.jpg          5                   3
225     250E        cdn_hash_4.jpg          5                   4
226     250E        cdn_hash_5.jpg          6                   5
227     250E        cdn_hash_6.jpg          6                   6
325     250E        cdn_hash_c1.jpg         -                   c1
426     250E        cdn_hash_c2.jpg         -                   c2
527     250E        cdn_hash_c3.jpg         -                   c3

SELECT * FROM products WHERE ORDER BY custom_order DESC

现在,我想做以下事情:

SELECT * FROM products WHERE ORDER BY custom_order AND START VALUE ='6'

因此,无论如何,c1,c2保持不变,结果将是:

22      250E        cdn_hash_5.jpg          6                   5
23      250E        cdn_hash_6.jpg          6                   6
24      250E        cdn_hash_1.jpg          5                   1
225     250E        cdn_hash_2.jpg          5                   2
226     250E        cdn_hash_3.jpg          5                   3
227     250E        cdn_hash_4.jpg          5                   4
325     250E        cdn_hash_c1.jpg         -                   c1
426     250E        cdn_hash_c2.jpg         -                   c2
527     250E        cdn_hash_c3.jpg         -                   c3

3 个答案:

答案 0 :(得分:10)

这是我正在寻找的答案。我希望我没有为此投票,但我设法解决了这个问题。

让我再简单解释一下。 MySQL ORDER BY +以...开头

MySQL:

id | name  |
------------
1  | Joe   |
2  | Craig |
3  | Shawn |
4  | Ryan  |
5  | Seth  |

PHP:

$a = mysql_query("SELECT * FROM table_name ORDER BY name DESC");

我想做的是,我想从id:3开始,所以它应该输出:

3,4,5,1,2

解决方案1 ​​

SELECT id, name
FROM table_name
ORDER BY id < 3, id

结果:

3  Shawn
4  Ryan
5  Seth
1  Joe
2  Craig

解决方案2

您可以使用FIELD,例如

SELECT * 
FROM products 
ORDER BY FIELD(`order`, 6) ASC

答案 1 :(得分:0)

<击>

<击>

WHERE条件应该出现在ORDER BY子句

之前
SELECT * 
FROM products 
WHERE START_VALUE = '6' 
ORDER BY order

作为旁注,ORDERRESERVED个关键字。逃脱它的一种方法是用反引号包裹。例如,

SELECT * 
FROM products 
WHERE START_VALUE = '6' 
ORDER BY `order`

另一个是提供ALIAS

SELECT * 
FROM products p
WHERE START_VALUE = '6' 
ORDER BY p.order

<击>

但回头看你的问题,你想自定义数据吗?您可以使用FIELD,例如

SELECT * 
FROM products 
ORDER BY FIELD(`order`, 6) ASC

答案 2 :(得分:-2)

请清除你的问题。如果你想要所有记录,请使用如下的查询...

SELECT * FROM products WHERE ORDER BY COLOURID ASC,订购DESC