2012-06-22 121 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