我有一张产品表。此表是使用@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
mCountDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUnitFinished) {
}
@Override
public void onFinish() {
//you will get status every 5 second here.
}
};
mCountDownTimer.start();
return START_NOT_STICKY;
}
查询创建的。我想添加顺序行计数或顺序(1,2,3 ..)。
但是,当产品类别或供应商发生变化时,我希望此计数重置为1。 (在查询产品类别和供应商的组合时,我最终会得到一个排序顺序)。
此问题是与较大问题相关的子问题的简化。因此,涉及php的其他解决方案并不相关。
这是一个示例表:
SELECT from X ORDER by Y
如果查询成功运行,它应该是这样的:
+--------------+------------------+-----------+-----------+
| product_name | product_category | vendor_id | sortorder |
+--------------+------------------+-----------+-----------+
| Product 1 | A | 1 | 0 |
| Product 2 | A | 1 | 0 |
| Product 3 | A | 1 | 0 |
| Product 4 | B | 1 | 0 |
| Product 5 | B | 1 | 0 |
| Product 6 | C | 2 | 0 |
| Product 7 | C | 2 | 0 |
| Product 8 | C | 2 | 0 |
| Product 9 | C | 2 | 0 |
| Product 10 | C | 2 | 0 |
+--------------+------------------+-----------+-----------+
我尝试了与此答案相关的不同查询的TON,主要是尝试从初始查询中获取此结果,但无济于事: Using LIMIT within GROUP BY to get N results per group?
我可以运行这样的查询来命令1,2,3,10):
+--------------+------------------+-----------+-----------+
| product_name | product_category | vendor_id | sortorder |
+--------------+------------------+-----------+-----------+
| Product 1 | A | 1 | 1 |
| Product 2 | A | 1 | 2 |
| Product 3 | A | 1 | 3 |
| Product 4 | B | 1 | 1 |
| Product 5 | B | 1 | 2 |
| Product 6 | C | 2 | 1 |
| Product 7 | C | 2 | 2 |
| Product 8 | C | 2 | 3 |
| Product 9 | C | 2 | 1 |
| Product 10 | C | 2 | 1 |
+--------------+------------------+-----------+-----------+
但是,这并没有达到我想要的效果,这是在' product_category'产品3和产品4之间的变化。
语法错误,这就是我想要做的事情:
SET @pos = 0;
UPDATE testtable SET sortorder = ( SELECT @pos := @pos + 1 );
一如既往地谢谢......
修改-2016年9月12日
尝试@Fancypants的解决方案。实际上,起初似乎不起作用,但它与" product_name"字段排序顺序。它将产品10放在产品5之前(1在5之前)。一旦我通过使用整数字段来解释它,结果就是完美的。
答案 0 :(得分:0)
我认为您的预期结果有错误。产品9和10的排序顺序应为4和5,对吧?
以下是如何做到的:
UPDATE t
JOIN (
SELECT
t.*
, @rc := IF(@prevpc != product_category OR @prevv != vendor_id, 1, @rc + 1) AS so
, @prevpc := product_category
, @prevv := vendor_id
FROM
t
, (SELECT @prevpc := NULL, @prevv := NULL, @rc := 0) var_init_subquery
ORDER BY product_category, vendor_id, product_name
) sq ON t.product_name = sq.product_name
SET t.sortorder = sq.so;