我有两张表格如下: 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'];
}
答案 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.years
是DATE
或DATETIME
,请使用YEAR()
仅返回其中的年份部分,并将其与当前年份的YEAR(CURDATE())
进行比较。加入table1.year
中的年数。
SELECT
table1.*,
table2.*
FROM
table1
JOIN table2
ON table1.year = (YEAR(CURDATE()) - YEAR(table2.years))