我有几张表有一个相同的字段added
。我想做的是从所有这些记录中获得最早的一年。
表格:
comics | movies | tv | tv_episodes
代码到目前为止(不起作用):
function getStartYear() {
include("config.php");
$query = "SELECT DATE_FORMAT(added, '%Y') as `added` FROM (comics,movies,tv,tv_episodes) ORDER BY `added` DESC LIMIT 1";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
return $row['added'];
}
}
错误返回:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\xampp\htdocs\mydb\functions\common.php on line 94
最有效的方法是什么?
更新
所以按照安德鲁的回答,新查询如下:
function getStartYear() {
include("config.php");
$query = "SELECT MIN(y) FROM (
SELECT MIN(YEAR(added)) AS y FROM comics
UNION SELECT MIN(YEAR(added)) AS y FROM movies
UNION SELECT MIN(YEAR(added)) AS y FROM tv
UNION SELECT MIN(YEAR(added)) AS y FROM tv_episodes
) AS t1";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
$finalanswer = mysql_fetch_array($result);
return $finalanswer['t1']; // <-- Line 96
}else{
echo mysql_error();
}
}
新消息:
Notice: Undefined index: t1 in E:\xampp\htdocs\mydb\functions\common.php on line 96
答案 0 :(得分:2)
可以使用UNION子查询通过SQL检索它:
SELECT MIN(y) FROM (
SELECT MIN(YEAR(added)) AS y FROM table1
UNION SELECT MIN(YEAR(added)) AS y FROM table2
...
) AS t1;
答案 1 :(得分:1)
首先,您应该检查以确保您的SQL语句实际返回所需的数据。在某种SQL查看器(或phpMySQL)或
中运行脚本本身echo mysql_error();
只是为了确保没有无效的SQL语句。
您收到的无效资源错误向我表明您的mysql_query函数的“$ result”不是有效资源。
所以:
if (!$result = mysql_query($query))
echo mysql_error();
如果您的查询中有错误,请进行诊断和修复,然后从那里开始......
现在看来,你正在从循环中间做一个“返回”,这意味着你要返回结果集中找到的第一个对象。
我会考虑而不是“循环”,这样做:
if (mysql_num_rows($result) > 0)
{
$finalanswer = mysql_fetch_array($result);
return $finalanswer['added'];
}
else
echo mysql_error();
错误陷阱是养成习惯的好方法。 :)