2013-05-08 2 views
0

postgreSQL 테이블의 "email"열에 같은 텍스트가있는 항목을 선택하려고합니다. 나는 completly 데이터베이스에 새로운 것이고 이것이 내가 만든 데이터베이스 중 첫 번째 데이터베이스이다. 어리석은 질문이라면 미안하다. 내 데이터베이스에는 key, user_mails 및 json_adress의 세 열이 있습니다. 시도 했음postgresql : 조건을 만족하는 항목을 선택하는 방법

$existent= "SELECT * FROM 
      (SELECT public.account_recover_users.* AS keys,emails,jsons 
      FROM public.account_recover_users) 
      WHERE emails='$email'"; 

하지만 나는 어딘가에서 착각하고 있다고 생각합니다.

도와주세요, 나는 배우려고 노력하고있어 조금 붙어있어.

+0

오류가 있습니까? 정확히 무엇이 잘못 될까요? 변수에 sql 문을 할당하면 실제로 데이터베이스를 쿼리하는 것만으로는 충분하지 않기 때문에 PHP/Postgres 인터페이스를 사용하고 싶습니다. 코드를 더 많이 보여 주면 도움이 될 것입니다. SELECT * FROM public.account_recover_users WHERE user_mails = '$ email' " – sgroves

+0

@sgroves 오류 : FROM의 하위 쿼리에는 별칭이 있어야합니다. 힌트 : 예를 들어, FROM (SELECT ...)) [그대로] foo. –

+0

내 의견을 업데이트했습니다 - 거기에 쿼리를 시도하십시오. – sgroves

답변

0

현재 받아 들여지는 답변이 여러면에서 잘못되어 있기 때문에 다른 답변을 쓰고 있습니다. OP가 잘못 대답을 수락 했음에도 불구하고 제시된 두 쿼리 모두 작동하지 않습니다.
원래 쿼리가 여러 가지 이유로 작동하지 않을 수 있습니다 :

  • 으로 언급되었다 (그리고 오류 메시지가 명확하게 명시) : 하위 쿼리 별칭이 필요합니다.

  • 마찬가지로 언급 한 바와 같이, 하위 쿼리는 단순한 작업에서 무의미합니다.

  • 이 구조는 말도 : public.account_recover_users.* AS keys 당신은이 열 목록에 *을 확장 한 후 별칭을 을 적용 할 수 없습니다. 포스트그레스는 그냥 무시합니다. 향후 릴리스에서는 예외가 발생할 수 있습니다.

  • 설명에 따르면 기존 열의 이름은 key, user_mailsjson_adress (sic!)입니다. emails 또는 jsons은 잘못된 참조입니다.

귀하의 절대적 기본 쿼리해야합니다 :

"SELECT * FROM public.account_recover_users WHERE emails = '$email'" 

당신은 열 별칭를 appling하여 쿼리의 열 이름을 바꿀 수 있지만 WHERE 절은 출력 열 (별칭)을 참조 할 수 없습니다, 그것은이 입력 열을 참조합니다 :

"SELECT key, user_mails AS email, json_adress AS jsons 
FROM public.account_recover_users 
WHERE user_mails = '$email'"

이 관련 답변에 대한 자세한 설명 :
How to re-use result for SELECT, WHERE and ORDER BY clauses?

+0

고맙습니다. 자세한 설명은 정말 좋은 대답입니다. –

1

ERROR: subquery in FROM must have an alias Hint: For example, FROM (SELECT ...) [AS] foo 오류가 발생한 이유는 사용하는 하위 쿼리에 별칭 (애칭)을 지정해야하기 때문입니다. 따라서 오류 메시지 힌트에서 수행해야 할 작업을 수행하십시오.

"SELECT * 
FROM (
    SELECT public.account_recover_users.* AS keys, emails, jsons 
    FROM public.account_recover_users 
) as subq 
WHERE emails='$email'" 

하지만 하위 쿼리는 전혀 필요하지 않습니다. 이것은 단지 단순화 할 수 있습니다 : 선택에 따라

"SELECT * FROM account_recover_users WHERE user_mails='$email'" 

이름을 변경하려는 경우

(즉 별칭을 부여)하여 열, 나는 하위 쿼리를 사용하지 않을 것입니다. 시도해보십시오.

"SELECT key as keys, user_mails as emails, json_adress as jsons 
FROM account_recover_users 
WHERE emails='$email'" 

나는 이것을 권장하지 않습니다. 모든 열에 별칭을 지정하려는 경우 데이터베이스의 열 이름을 변경하지 않는 이유는 무엇입니까?

0

파생 테이블 (괄호 안)에서 public.account_recover_users를 참조하기 때문에 파생 테이블에 거의 모든 것이 될 수있는 별칭을 부여해야합니다.

$existent= "SELECT * FROM 
(SELECT public.account_recover_users.* AS keys,emails,jsons 
FROM public.account_recover_users) as aru 
WHERE emails='$email'"; 

귀하의 경우에는 파생 된 테이블이 전혀 필요하지 않다고 생각합니다. 너는 쓸 수있어.

$existent = "SELECT key as keys, user_mail as emails, json_address as jsons 
FROM public.account_recover_users 
WHERE emails='$email'"; 
0

하위 쿼리가 필요하지 않습니다 ... 실제로 필요하면 별칭을 지정하십시오.

기본적으로 검색 경로에 있으므로 공개 할 필요가 없습니다.

필드를 모두 선택 했으므로 여기에 필드가 필요하지 않습니다.

SELECT * FROM account_recover_users WHERE user_mails='$email' 

아, 그리고 PDO::prepare()로 봐 ... $email를 탈출하는 것을 잊지 마세요.

관련 문제