2015-09-03 24 views
0

在試圖計算單個玩家最長的射門得分時,我碰到了一個絆腳石,>= PHP運算符沒有按預期執行。PHP比較運算符不能在MySQL條紋查詢中工作

的數據在表格中顯示如下:

 
    date   gls 
------------------------ 
    1980-08-16  2 
    1980-08-19  1 
    1980-08-23  1 
    1980-08-26  0 
    1980-08-30  1 
    1980-09-06  2 
    1980-09-13  0 
... and so on  

我使用的PHP查詢如下:

SELECT gls, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games 
FROM (SELECT gls, date, 
      (SELECT COUNT(*) 
       FROM goalsengine G 
       WHERE G.gls <> GE.gls 
       AND G.date <= GE.date) as RunGroup 
    FROM goalsengine GE) A 
WHERE gls>='1' 
GROUP BY gls, RunGroup 
ORDER BY Games 

我形成的查詢這樣的信念,即>=會理解這位球員在比賽中取得一個或多個進球的連勝數。例如,從上表中可以看出,前三項將代表三場比賽的得分。

取而代之的是,查詢返回條紋,但只有在獲得了一定數量的進球時(即,儘管在前三場比賽中得分),當條紋返回時,第一項(其中兩個進球得分,而不是一個)被忽略。

要返回的結果,我使用了以下內容:

while($row=mysql_fetch_assoc($result)) 
{ 
{$startrundate = date("d F Y",strtotime($row['StartDate']));} 
{$endrundate = date("d F Y",strtotime($row['EndDate']));}   
echo "<tr>"; 
echo "<td>".$row['Games']."</td>"; 
echo "<td class='tableprofile' style='text-align:right;'>".$startrundate." - ".$endrundate."</td>"; 
echo "</tr>";  
$rowCount += 1; 
} 

相比之下,WHERE gls='0'是給我想要的不進球的條紋。我覺得我可能忽視了一些直截了當的東西,但看不到它。

+0

只有一個建議,但你有沒有考慮在GROUP BY之後使用HAVING來過濾你的'gls'..類似於'GROUP BY gls,RunGroup HAVING gls> = 1 ORDER BY Games' – MaggsWeb

+0

PHP代碼在哪裏?再問一下? – Barmar

+0

我沒有考慮過@MaggsWeb,但它對輸出沒有影響。 –

回答

0

我已經設法解決這個特定的問題,它的工作原理據我所知,手動計算了一些原始數據。

SELECT gls, MIN(date) as StartDate, MAX(date) as EndDate, COUNT(*) as Games 
FROM (SELECT gls, date, 
     (SELECT COUNT(*) 
      FROM goalsengine G 
      WHERE IF(G.gls IN ('1','2','3','4','5'),1,0) <> IF(GE.gls IN ('1','2','3','4','5'),1,0) 
    AND G.date <= GE.date) as RunGroup 
    FROM goalsengine GE) A 
WHERE gls IN ('1','2','3','4','5') GROUP BY IF(bg IN ('1','2','3','4','5'),1,0), RunGroup ORDER BY Games DESC LIMIT 3"); 

我承認它並不完全漂亮,但它現在正在完成這項工作。在計算中我已經達到了5分,因爲這是關於這個數據集在單場比賽中得分的最大數量。