-1

'main_table'という3つの列を持つテーブルがあります:
'player'、'points'、'drop_date'

異なる値を持つ1つの変数($ date)があります:

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

MySQLクエリが1つあります:

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

目標:
異なるパスで1つのクエリを実行したい(値ごとに1パス)

私が試してみました :

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

3 に答える 3

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

クエリを変数に入れたり、クエリ結果を変数に入れたりすることをスキップして、全体を1行にまとめたことに注意してください。クエリはlimit 11行しか返さないため、ループする必要はありませんwhile

于 2012-06-22T16:17:17.150 に答える
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'];
    }
}
于 2012-06-22T16:16:28.367 に答える
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 />
于 2012-06-22T16:21:29.637 に答える