2016-08-12 24 views
-1

我在我的網站上使用Oscommeerce與舊的MySql版本和PHP版本4。獲取order_id,其中order_id有兩個時間x值

我的表結構:

| orders_status_history_id | orders_id | orders_status_id | 
|   1    |  22 |   3   | 
|   2    |  23 |   2   | 
|   3    |  24 |   5   | 
|   4    |  75 |   5   | 
|   5    |  25 |   5   | 
|   6    |  30 |   1   | 
|   7    |  26 |   2   | 
|   8    |  75 |   54  | 
|   10   |  22 |   5   | 
|   15   |  48 |   6   | 
|   16   |  52 |   8   | 
|   17   |  32 |   9   | 
|   18   |  75 |   54  | 
|   19   |  24 |   5   | 
|   22   |  20 |   8   | 
|   23   |  75 |   54  | 
|   ..   |  .. |   ..  | 
|   ..   |  .. |   ..  | 

我的表有整體超過200萬行。

orders_status_history_id列是auto increment

所以我的問題是:

我如何獲得orders_id其中orders_status_id有兩個時間54 id

例如: 如果orders_id 75有orders_status_id = 54那麼它應該顯示我的orders_id 75,如果沒有,則跳過它。

因此,我希望輸出像這樣:

|  orders_status_id  | orders_id | 
|   54   |  75 | 

我累了以下幾個方面:

$sql = "SELECT 
      orders_status_history_id, orders_id, orders_status_id 
     FROM 
      orders_status_history 
     Where 
      (orders_status_history_id > ".$dal." AND orders_status_history_id < ".$al.") 
     AND 
      orders_id IN(
        Select Distinct 
         orders_id 
        From 
         orders_status_history 
        Where 
         (orders_status_history_id > ".$dal." AND orders_status_history_id < ".$al.") 
        HAVING 
         count(orders_status_id=54)>2 
       )"; 

沒有工作

SELECT 
    orders_status_history_id, orders_id, orders_status_id 
    FROM 
     orders_status_history 
    WHERE 
     (orders_status_history_id > 0 AND orders_status_history_id < 500) 
    AND 
     orders_id IN (
      Select 
       orders_id 
      FROM 
       orders_status_history 
      WHERE 
       (orders_status_history_id > 0 AND orders_status_history_id < 1000) 
      AND 
       count(orders_status_id=54) >2 
     ) 

我找不到查詢來獲取所需結果。

我究竟做錯了什麼?

在此先感謝。

回答

1

我會用group byhaving做到這一點:

select orders_id 
from orders_status_history 
where orders_status_id = 54 
group by orders_id 
having count(*) >= 2; 

如果你真的想要的全部細節,然後用joinin

select osh.* 
from orders_status_history osh join 
    (select orders_id 
     from orders_status_history 
     where orders_status_id = 54 
     group by orders_id 
     having count(*) >= 2 
    ) o 
    on osh.orders_id = o.orders_id; 
+0

小組在哪裏? – jarlh

+0

@gordonLinoff它給了我這個錯誤:'查詢執行被中斷'我有1900000 +行離我的表 –

+0

@jarlh。 。 。它現在在那裏。 –

1

試試這個:

SELECT orders_status_history_id, orders_id, orders_status_id 
FROM orders_status_history 
WHERE (orders_status_history_id > 0 AND orders_status_history_id < 500) and orders_id IN (
    SELECT orders_id 
    FROM orders_status_history 
    GROUP BY orders_id 
    HAVING COUNT(orders_status_history_id) > 1 
) 
+0

不行不行:( –

1

是否這樣?

SELECT orders_id, orders_status_id 
FROM test 
AS r 
WHERE (
    SELECT count(*) FROM test 
    WHERE orders_id=r.orders_id AND orders_status_id=r.orders_status_id 
)>=2 
GROUP BY orders_status_id 

希望工程。

相關問題