这是一个奇怪的要求,因为它应该通过连接来完成。在循环中使用多个查询执行此操作的效率远低于使用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.years
是DATE
or DATETIME
,用于YEAR()
仅返回其中的年份部分,并将其YEAR(CURDATE())
与当前年份进行比较。加入这个反对年数table1.year
。
SELECT
table1.*,
table2.*
FROM
table1
JOIN table2
ON table1.year = (YEAR(CURDATE()) - YEAR(table2.years))