2015-02-11 45 views
0

我试图用一个mysql select query数,并增加可变/不存在的列只有orders_status不等于pulledpulling否则它empty创下的ROWNUMBER。我打算在PHP脚本执行一个标志,如果row_number=400初始化然后增加,如果

$orders_query_raw = "SELECT 
        o.orders_id, 
        o.customers_name, 
        o.payment_method, 
        o.date_purchased, 
        o.delivery_date, 
        o.delivery_time_slotid, 
        o.last_modified, 
        o.currency, 
        o.currency_value, 
        s.orders_status_name, 
        ot.text as order_total 
       FROM " . TABLE_ORDERS . " o 
       LEFT JOIN " . TABLE_ORDERS_TOTAL . " ot ON (o.orders_id = ot.orders_id), " . TABLE_ORDERS_STATUS . " s 
       WHERE o.orders_status = s.orders_status_id 
        AND s.language_id = '" . (int)$languages_id . "' 
        AND s.orders_status_id = '" . (int)$status . "' 
        AND ot.class = 'ot_total' 
       ORDER BY o.orders_id DESC"; 

初步结果使用count:

orders_id | orders_status 
    34a | pulling   
    45a | pending  
    45u | pulled  
    36c | payment_due 

期望的结果返回

orders_id | orders_status | rownumber 
    34a | pulling  | 
    45a | pending  | 1 
    45u | pulled  | 
    36c | payment_due | 2 
+0

您能给我们提供您正在处理的代码吗? – 2015-02-11 01:15:59

+0

你为什么需要那个索引?从SQL方面来说,它没有意义,哪一行必须是第一位,哪一行是第二位?有没有规则?如果所有行具有相同的优先级,那么SQL如何设置该数字?你计划做什么,如果'row_number == 400' ??? – Alex 2015-02-11 01:19:00

+0

这是最初的查询,有一个复杂的事情的splitoageresults函数。如果我可以添加一个临时列,我可以稍后使用列变量。 – Eric 2015-02-11 01:45:17

回答

0

你可以开始与此代码。只需更换必要的table名,column名,variables

$result = mysqli_query($YourDBconnection,"SELECT * FROM yourTable WHERE orders_status<>'pulling' AND orders_status<>'pulled' ORDER BY orders_id"); 

$count = 1; /* SET A COUNTER */ 

while($row = mysqli_fetch_array($result)){ 

    $orderid = $row["orders_id"]; 
    mysqli_query($YourDBconnection,"UPDATE yourTable SET rownumber='$count' WHERE orders_id='$orderid'"); /* UPDATE THE TABLE */ 

    $count=$count+1; /* INCREMENT YOUR COUNTER */ 

} 
+0

尽管戈登的推荐正是我所期待的。就我而言,我必须和你的Logan一起去。我试图避免向数据库添加新的列,但更少的代码=更多的生产。 – Eric 2015-02-11 18:52:24

+0

@Eric - 如果我的回答对你有帮助,你仍然可以提出我的答案,或者如果它真的解决了你的整个问题,那么你可以将其标记为正确的答案。 – 2015-02-13 00:16:37

+0

洛根,我会但显然我没有足够的声望点upvote它。不过谢谢你的时间,我是一个坚持信用的人,在信用到期的时候,不幸的是,今晚在这个问题上不舒服。 ;) – Eric 2015-02-24 01:23:33

1

,只要你想使用变量可以增加价值。您的查询有点复杂,但这里有这样的想法:

select . . ., 
     (case when order_status in ('pulled', 'pulling') then NULL 
      else @rn := @rn + 1 
     end) as rownumber 
from . . . cross join 
    (select @rn := 0) vars; 
+0

WOW,酷,我应该记住这一点。你知道它真的工作得很快吗?在真实情况下,它比只选择和计算PHP方面更有效率吗? – Alex 2015-02-11 02:02:19

+0

正是我在找...因为我的劈屏功能,我不得不实施Logans方法 – Eric 2015-02-11 18:51:48