2012-03-25 3 views
0

동일한 필드가있는 테이블이 두 개 있습니다 (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 

어떻게이 작업을 수행하는 가장 효율적인 방법이 될 것입니다 ?

UPDATE 그래서 앤드류의 대답으로가는 새 쿼리가 보이는

같은 :

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

이 오류는 SQL 쿼리가 실패했음을 의미합니다. 디버깅을 시작해야합니다. – Quasdunk

+1

'FROM' 절에 나열된 테이블은'()'로 묶어서는 안됩니다. 그런 다음 나열된 모든 테이블간에 조인 조건이 없으므로 모든 테이블의 모든 행에 모든 테이블의 모든 행을 곱한 커다란 직교 곱이 산출됩니다. mysql_error()로 쿼리 문법 오류를 찾아라. –

+0

앤드류 (Andrew)가 제안한 것처럼 쿼리를 바 꾸었습니다. 그리고 이제는 't1'에 대한 색인이 없다고 말합니다. – rackemup420

답변

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; 
+0

Notice : 정의되지 않은 색인 : t1 in E : \ xampp \ htdocs \ mydb \ functions \ common.php on line 96 – rackemup420

+0

위의 코멘트를 참조하십시오. –

1

먼저 SQL 문이 실제로 원하는 데이터를 반환하는지 확인해야합니다. 당신이 유효하지 않은 SQL 문이없는 확인하기 위해 SQL 뷰어 (또는 phpMySQL) 일종의 스크립트 자체를 실행하거나

echo mysql_error(); 

.

잘못된 리소스 오류로 인해 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(); 

오류 트래핑이의 습관을 얻을 수있는 좋은 점의 일종이다. :)

+0

여전히 동일한 메시지를 반환합니다. – rackemup420

+0

그런 경우, 잘못하고있는 것입니다. mysql_error()는 PHP 오류와 근본적으로 다릅니다. 당신은 올바른 곳을보고 있지 않습니다. $ result는 유효한 "리소스"가 아닙니다. 즉, mysql_query가 적절한 데이터베이스 결과를 반환하지 않아 SQL 쿼리가 어떤 식 으로든 결함이 있음을 의미합니다. –

+0

은 앤드류 (Andrew)의 제안으로 내 쿼리를 변경했으며 문제를 해결했지만 새로운 것이 있습니다. t1에 정의되지 않은 인덱스 ... 위 내 의견을 확인하십시오 : d ty. – rackemup420

관련 문제