2012-06-22 122 views
-1

我有一個叫做「MAIN_TABLE」 3列表:
「球員」,「分」和「DROP_DATE」MySQL查詢一個變量

我有1個變量($日期)使用不同的值:

$date == '2012-06-01' 
$date == '2012-05-01' 
$date == '2012-04-01' 

我有1個MySQL查詢:

$query = " 
    select * 
    from main_table 
    where `drop_date` > '$date' 
    AND `drop_date` <= DATE_ADD('$date', INTERVAL 1 YEAR) 
    LIMIT 1 
"; 

目標:
我想運行一個查詢不同的通行證(1pas每值s)

我曾嘗試:

<?php 
$date['date'] = '2012-06-01'; 
$date['date'] = '2012-05-01'; 
$date['date'] = '2012-04-01'; 

foreach($date as $title => $actual_date) { 
    query = " 
    select * 
    from main_table 
    where `drop_date` > '$actual_date' 
     AND `drop_date` <= DATE_ADD('$actual_date', INTERVAL 1 YEAR) 
    LIMIT 1 
    "; 
    $result = mysql_query($query) or die(mysql_error()); 
} 

while($row = mysql_fetch_array($result)) { 
    echo $row['Player']; 
    echo $row['Points']; 
} 
+1

注意:你在'$日[重寫數組中相同的插槽」日期'] =' – biziclop

+0

你在最後一個例子中的代碼嚇了我一跳介意:你在字典中對每個日期使用相同的密鑰,可能這些密鑰應該是不同的;那麼,貫穿查詢結果的位就在一個單獨的範圍內,以便定義結果的位置,這不用說也行不通......不要讓我開始參數化查詢! – Xophmeister

+0

你用上一個值'2012-14-01'覆蓋了你的$ date ['date']'。其他值丟失了。 –

回答

1

只動,而在foreach循環。

<?php 
$date[0] = '2012-06-01'; 
$date[1] = '2012-05-01'; 
$date[2] = '2012-04-01'; 
foreach($date as $title => $actual_date) 
{ 
    query = "select * from main_table where `drop_date` > '$actual_date' AND `drop_date` <= DATE_ADD('$actual_date', INTERVAL 1 YEAR) LIMIT 1"; 
    $result = mysql_query($query) or die(mysql_error()); 

    while($row = mysql_fetch_array($result)) 
    { 
     echo $row['Player']; 
     echo $row['Points']; 
    } 
} 
+0

非常有幫助,謝謝! – Naim

3

您一直覆蓋同一個變量...然後運行查詢,但只取得最後一個結果。你如何期待它的工作?

試試這個:

$date = Array("2012-06-01","2012-05-01","2012-04-02"); 
foreach($date as $actual_date) { 
    if($result = mysql_fetch_assoc(mysql_query("select * from `main_table` where `drop_date`>'".$actual_date."' and `drop_date`<=date_add('".$actual_date."',interval 1 year) limit 1"))) { 
     echo $result['Player']; 
     echo $result['Points']; 
    } 
} 

注意,我跳過把查詢放在一個變量,並把查詢結果在一個變量,只是一個內襯整個事情。既然你有limit 1查詢將只返回一行,所以沒有必要while -loop它。

+0

好工作Kolink – Naim

+0

快速更新:想要在輸出中回顯$ actual_date,但它始終顯示2005,2006,2007而不是「2012-06-01」,「2012-05-01」,「2012-04-02 「, 任何想法? – Naim

+0

它實際上正在計算它,例如2012-06-01 = 2005!所以它顯示結果。添加「到托馬斯的答案來整理它! – Naim

1

請勿覆蓋您的值。這樣做是爲了保持所有3個值。

<?php 
$date['date'][] = '2012-06-01'; 
$date['date'][] = '2012-05-01'; 
$date['date'][] = '2012-04-01'; 

print_r($date); 
?> 

OUTPUT:

Array 
(
    [date] => Array 
     (
      [0] => 2012-06-01 
      [1] => 2012-05-01 
      [2] => 2012-04-01 
     ) 

) 

然後使用

foreach ($date['date'] as $actual_date) { 

$query = " 
    select * 
    from main_table 
    where `drop_date` > '$actual_date' 
    AND `drop_date` <= DATE_ADD('$actual_date', INTERVAL 1 YEAR) 
    LIMIT 1"; 

    echo $query."<br />"; 

} 

OUTPUT:

select * 
    from main_table 
    where `drop_date` > '2012-06-01' 
     AND `drop_date` <= DATE_ADD('2012-06-01', INTERVAL 1 YEAR) 
    LIMIT 1 
    <br /> 
    select * 
    from main_table 
    where `drop_date` > '2012-05-01' 
     AND `drop_date` <= DATE_ADD('2012-05-01', INTERVAL 1 YEAR) 
    LIMIT 1 
    <br /> 
    select * 
    from main_table 
    where `drop_date` > '2012-04-01' 
     AND `drop_date` <= DATE_ADD('2012-04-01', INTERVAL 1 YEAR) 
    LIMIT 1 
    <br /> 
+0

有用,謝謝! – Naim