MySQL查询带有一个变量

时间:2012-06-22 16:12:02

标签: php mysql

我有一个名为'main_table'的表,有3列:
'玩家','积分'和'drop_date'

我有1个不同值的变量($ date):

$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
";

目标:
我想用不同的传递(每个值1pass)运行一个查询

我试过了:

<?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'];
}

3 个答案:

答案 0 :(得分: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 - 循环查询。

答案 1 :(得分: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'];
    }
}

答案 2 :(得分:1)

不要覆盖您的值。这样做是为了保留所有3个值。

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

print_r($date);
?>

输出:

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 />";

}

输出:

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 />