检查两个表中两列的值是否相等然后返回

时间:2012-07-01 19:01:04

标签: php mysql sql arrays multidimensional-array

我有两张表格如下: 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'];
}

1 个答案:

答案 0 :(得分: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.yearsDATEDATETIME,请使用YEAR()仅返回其中的年份部分,并将其与当前年份的YEAR(CURDATE())进行比较。加入table1.year中的年数。

SELECT 
  table1.*, 
  table2.*
FROM 
  table1
  JOIN table2 
    ON table1.year = (YEAR(CURDATE()) - YEAR(table2.years))