从多个表中获取最早的一年

时间:2012-03-25 16:45:04

标签: php mysql

我有几张表有一个相同的字段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

2 个答案:

答案 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();

错误陷阱是养成习惯的好方法。 :)