2

我有 2 个表如下: table1 有这些字段:

year,day,month,name

table2 有这些字段:

years,gift

我想返回年 = 年的行。这两个查询需要单独运行,这是一个条件。我不能将它们加入到 1 个查询中(我知道该怎么做,但不应该这样做)。有什么建议么?我想过使用 foreach 循环但未能实现,有什么想法吗?

$sql1 = " SELECT * FROM table1 ORDER BY id ASC";
  $result1 = mysql_query($sql1);
  $rows = mysql_fetch_array($result1);
    while($rows = mysql_fetch_array($result1))
  { 
  $year[]         = $rows['year'];
}

$sqlx = "SELECT * FROM table2";
  $result = mysql_query($sqlx); 

  while($row = mysql_fetch_array($result))
    {
$years[]         = $rows['years'];
}
4

1 回答 1

3

这是一个奇怪的要求,因为它应该通过连接来完成。在循环中使用多个查询执行此操作的效率远低于使用JOIN.

在任何情况下,如果您必须这样做,您已经从第一个查询中正确地将年份检索到一个数组中——使用该数组为第二个查询的每个循环迭代填充查询:

  $year = array();
  $sql1 = " SELECT * FROM table1";
  $result1 = mysql_query($sql1);
  if ($result1) {
    $rows = mysql_fetch_array($result1);
    while($rows = mysql_fetch_array($result1))
    { 
      $year[] = $rows['year'];
    }
  }

  // Will hold your output
  $gifts = array();
  // $year is now an array of years.
  // Loop over it to query table2:
  foreach ($year as $y) {
    // Make sure it is an integer...
    $y = intval($y);
    // And query table2 using $y as a WHERE condition
    $sql2 = "SELECT years, gift FROM table2 WHERE years = $y";
    $result2 = mysql_query($sql2);
    if ($result2) {
       while($row = mysql_fetch_array($result2)) {
         // Append all rows to the $gifts array
         $gifts[] = $row;
       }
    }
  }

  // They're now all in the array $gifts.
  var_dump($gifts);

更新:

表 1 中的年份是以年为单位的期间。表中的年份是创建帐户的日期。所以我必须在table2上找到今天日期与年份的差异。然后查看它是否与 table1 上的任何行匹配。并返回匹配的结果

这可以通过JOIN使用日期函数的创意来完成。假设table2.yearsDATEor DATETIME,用于YEAR()仅返回其中的年份部分,并将其YEAR(CURDATE())与当前年份进行比较。加入这个反对年数table1.year

SELECT 
  table1.*, 
  table2.*
FROM 
  table1
  JOIN table2 
    ON table1.year = (YEAR(CURDATE()) - YEAR(table2.years))
于 2012-07-01T19:14:54.340 回答