Php 带一个变量的MySQL查询

Php 带一个变量的MySQL查询,php,mysql,Php,Mysql,我有一个名为“main_table”的表,有3列: “玩家”、“积分”和“放弃日期” 我有1个变量($date),具有不同的值: $date == '2012-06-01' $date == '2012-05-01' $date == '2012-04-01' 我有一个MySQL查询: $query = " select * from main_table where `drop_date` > '$date' AND `drop_date` <=

我有一个名为“main_table”的表,有3列:
“玩家”、“积分”和“放弃日期”

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

$date == '2012-06-01'  
$date == '2012-05-01'  
$date == '2012-04-01'  
我有一个MySQL查询:

$query = "
  select *
  from main_table
  where `drop_date` > '$date'
    AND `drop_date` <= DATE_ADD('$date', INTERVAL 1 YEAR)
  LIMIT 1
";
$query=”
挑选*
从主表
其中'drop\u date`>'$date'

在foreach循环中,只需移动您的“drop\u date”

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

您不断重复覆盖同一个变量…然后运行查询,但只获取最后一个变量的结果。您希望它如何工作

试试这个:

$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'];
    }
}
$date=数组(“2012-06-01”、“2012-05-01”、“2012-04-02”);
foreach($日期为$实际日期){

如果($result=mysql\u fetch\u assoc(mysql\u query)(“从`main\u table`中选择*,其中`drop\u date`>”)“$actual\u date.”和`drop\u date`不覆盖您的值。这样做可以保留所有3个值

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

print_r($date);
?>
然后使用

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

}
foreach($date['date']作为$actual\u date){
$query=”
挑选*
从主表
其中`drop\u date`>'$actual\u date'

和'drop_date'注意:您正在覆盖数组中
$date['date']处的相同插槽=
上一个示例中的代码让我感到困惑:您在字典中为每个日期使用相同的键,可能这些日期应该是不同的;然后,贯穿查询结果的位位于定义所述结果的单独范围内,这不用说是行不通的……不要让我开始对您的查询进行参数化我已使用最后一个值(即“2012-14-01”)覆盖了您的
$date['date']
。其他值已丢失。请不要对新代码使用
mysql.*
函数。这些函数不再维护,社区已开始更新(请参阅)。相反,您应该了解并使用或。如果您不能决定使用哪一个,将对您有所帮助。如果您愿意学习,.quick update:希望在输出中也回显$actual_日期,但它一直显示200520062007,而不是“2012-06-01”、“2012-05-01”、“2012-04-02”“,有什么想法吗?它实际上是在计算它,例如2012-06-01=2005!所以它显示了结果。在托马斯的答案中添加了”来整理它!
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 />