2010-07-30 2 views
3

그래, 이건 이상하고 내 SQL 쿼리에 문제가 있어야한다고 생각하고 있는데, 그걸로 아무 문제가 보이지 않습니다. 일어나는 일은 내가 PHP 스크립트에서 실행하고있는 스크립트가있어 사용자가 등록한 모든 범주와 같은 범주에 대해 얼마나 많은 다른 사람들이 등록했는지 검색합니다. PHP 페이지에서 쿼리를 실행할 때 매우 느리지 만 결과가 반환됩니다. 나는 같은 스크립트를 실행 phpMyAdmin을 갔다 그래서 무슨 일이 벌어지고 있는지보고 싶어 그리고 그것은 매우 빠른 결과의 수를 반환하지만 다음 날 결과가 정상적으로 표시되는 다음과 같은 오류 제공 : 여기phpMyAdmin에서 오류가 PHP 스크립트에서 잘 실행됩니다.

#1064 - You have an error in your SQL syntax; check the manual that corresponds 
     to your MySQL server version for the right syntax to use near '' at line 1 

을 검색어 :

SELECT t1.category_id, t3.description AS 'Category', 
    t1.list_type_id, t2.name, t1.status_id, t2.user_id, 
    t2.email, UNIX_TIMESTAMP(t1.record_date) AS 'RecordDate', 
    (
     SELECT COUNT(category_id) 
     FROM t1_sub 
     WHERE t1_sub = t1.job_ctg_id AND 
      t1_sub.list_type_id = t1.list_type_id AND 
      t1_sub.status_id =44 
    ) AS 'MatchingListings' 
FROM t1 
INNER JOIN t2 ON t2.id_rfp_vendor_data = t1.user_id 
INNER JOIN t3 ON t3.type_lookup_id = t1.job_ctg_id 
WHERE t1.status_id =43 

나는 실망입니다. 내 질문에 대한 이유는 실제로 두 가지입니다 :

  1. 실종 된 쿼리에 실제로 잘못된 것이 있습니까?
  2. 그렇지 않은 경우 mysql에서 내 스크립트가 느리게 실행되는 이유와 PHP가이 문제를 해결하는 방법을 보여주는 오류가 있습니까? (이럴 가능성은 희박하지만 확신을 구해야합니다.)

고마워요!

+0

음 ... 따옴표'''를 역 인용 부호'\''로 바꿀 수 있습니까? (또는 양자를 모두 삭제하십시오) –

+1

+1 : MySQL 오류를 태그에 포함하려면 - 감사합니다! –

+0

@ 페카 (Pekka)는 그 일을 시도하고 어떤 일이 일어나는지 보도록하겠습니다. @OMG 예 누군가가 질문을 게시하고 뭔가 오류가 있으며 실제로 오류를주지 않는다고 말하면 나는 그것을 싫어합니다. 당신은 마치 코드를보고 어떤 오류가 있었는지 추측 할 수있는 마약 중독자입니다. 나는 그것이 가능하다는 것을 확신하지만 그것이 아닌 대부분의 시간을 의미합니다. 헐떡 거리다. : P – spinon

답변

1

phpMyAdmin을 약간 (첫 번째 30 선을 보여주기 위해 예를 들어, LIMIT 0.3 절을 추가) 쿼리를 다시 작성 에 자유를합니다.

쿼리 로그를 활성화하고 서버에서 실제로 실행되는 쿼리를 확인할 수 있습니까?

그렇지 않은 경우 작동 할 때까지 쿼리에서 요소를 제거하십시오. 그 쿼리를 보여줘. 또는 일부 테이블 정의를 표시 하시겠습니까?

+0

을 체크 했으므로 추가 코드가 추가되지 않습니다. 쿼리 로그에 대해 살펴보고 그 내용을 확인하십시오. 그런 다음 몇 가지 테이블 정의를 추가하려고 시도합니다. – spinon

+0

count 하위 쿼리를 제거했는데 문제가 있음이 밝혀졌습니다. 그러나 그것은 꽤 기본적인 것처럼 보인다. – spinon

+0

또 다른 발견은 열에 대한 모든 레이블을 제거하면 작동한다는 것입니다. – spinon

0

테이블 또는 열 이름에 공백이 있습니까? 그렇다면, 역 따옴표로 묶어 :

`table name` 
+2

공백이 없습니다. 개인적으로 나는 당신이 총격을 받아야하는 테이블이나 컬럼 이름에 공백이있는 것처럼 느낍니다. 다시 단지 내 의견. : P – spinon

+0

@spinon : 공백에 동의합니다. 나는 't1'을 제외하고 1 행에 이상한 것을 보지 않고있다. 실제 테이블 이름이 아닌 것으로 가정한다. –

+0

테이블 이름은 키워드가 아닙니다. –

0

당신이해야 할 일은 phpmyadmin을 삭제하고 다시 다운로드하지 않기로 약속하는 것입니다.

그런 다음 명령 줄 mysql 프롬프트를 시작하고 동일한 쿼리를 시도하십시오. 이것은 질의가 정말로 나쁜 것인지 또는 phpmyadmin이 오판 된 저자의 잘못된 기쁨을 위해 단순히 그것을 버리고 있는지를 알려줍니다.

+0

나는 언젠가 동의한다. phpMyAdmin은 나를 게으르게 만드는 데 아주 좋습니다. 때로는 커맨드 라인으로 항상 작업하고 싶지는 않습니다. 내가 세분화 된 컨트롤을 원할 때 좋지만 많이 입력하고 싶지 않을 때는 좋지 않습니다. 금요일 3 일에 분명히 그렇습니다. – spinon

+0

이것은 나를 음미합니다. PHPMyAdmin에 대해 좋아하지 않는 점은 무엇입니까? – Konerak

+0

필자는 사람들이 phpmyadmin이 오작동하는 데이터 나 시간을 잃는 이야기를 여러 번 읽었습니다. 나에게 이것은 너무 위험한 것이다. 읽기 전용 작업의 경우에는 문제가 없을 수 있습니다. – MarkR

관련 문제