2014-09-20 7 views
3

에 따라 달라집니다여러 선택 결과는이 같은 데이터베이스가 다른 선택

예를 들어

schema

, 사용자 요청의 모든 posts 데이터 posts.post_id = 1와 함께. posts.user_idpost_id = 1 에 따라 테이블 users에서 post_id = 1

  • 일부 필드와 테이블 postmeta에서 post_id = 1
  • 모든 fileds 테이블 posts에서

    • 일부 필드 : 지금은 다른 테이블에서 추가 데이터를 얻으려면
    • 테이블의 모든 필드는 post_id = 1
    • 과 일부 관계가있는 테이블 files의 필드 테이블 terms 어디에서 나는 단순히이 정보를 얻기 위해 5 개 쿼리를 실행할 수 있습니다 PHP에서 post_id = 1

    에 관계를 가지고,하지만 난 MySQL이이 빠르게 수행 할 수 있기 때문에 이것이 가장 좋은 방법은 아닌 것 같아요.

    업데이트 세부 :

    database + data

    는 MySQL을 사용이 할 수있는 방법이 있나요 내가 PHP와 정보를 얻기 위해 쿼리 실행입니까?

  • +2

    당신은 SQL'JOIN's에 읽어해야합니다. – andy

    +2

    약간의 MySQL'JOIN'을 알고 있지만 쿼리를 작성하지만 결과가 좋지 않은 것 같습니다. 4 레코드를 얻고'posts' 필드 (4 레코드에서 반복) 및'postmeta' 필드를 포함합니다. 이것은 성능면에서는 좋지 않습니까? – 123

    +2

    주어진 샘플에 몇 가지 샘플 컨텐츠와 원하는 결과를 추가하여 원하는 결과가 나오는 이유를 설명하십시오. – VMai

    답변

    3

    단일 쿼리가 항상 여러 쿼리보다 나은 것은 아닙니다. 이 경우에는 1 대 1 관계 만 결합하는 것이 좋지만 하나의 관계에 3 용어와 2 파일이 모두 1 대 관계를 결합하면 6 행을 생성하므로 다 대 1 관계에 대해 별도의 쿼리를 유지하는 것이 좋습니다.

    선택 후, 사용자 및 postmeta 데이터

    select * from posts p 
    join postmeta pm on pm.post_id = p.post_id 
    join users u on u.user_id = p.user_id 
    where p.post_id = 1 
    

    파일을 선택

    select f.* from files f 
    join file_relationships fr on fr.file_id = f.file_id 
    join posts p on p.post_id = fr.post_id 
    where p.post_id = 1 
    

    선택 조건

    select t.* from terms t 
    join term_relationships tr on tr.term_id = t.term_id 
    join posts p on p.post_id = tr.post_id 
    where p.post_id = 1 
    
    +2

    'posts'가있는'users'만이 1을 1 관계, 그럼 내가이 데이터를 얻을 4 쿼리를 실행 했나요? 그 경우에 – 123

    +2

    @ 123 네 개의 쿼리가있을 것입니다. – FuzzyTree

    1

    필요한 모든 JOIN이어야하며 원하는대로 SELECT 목록을 수정하십시오.

    select p.post_id, 
         p.post_title, 
         p.user_id, 
         u.user_name, 
         u.user_email, 
         pm.*, 
         f.* 
        from posts p 
        join postmeta pm 
        on p.post_id = pm.post_id 
        join users u 
        on p.user_id = u.user_id 
        join file_relationships fr 
        on p.post_id = fr.post_id 
        join files f 
        on fr.file_id = f.file_id 
    

    *는 표시된 별칭이있는 테이블의 '모든 열'을 나타냅니다.

    +2

    'JOIN'을 사용하는 경우 10 개 이상의 반복 열이 있습니다. 이것은 성능에 좋지 않습니다. 가능한 다른 방법은 해당 필드를 얻으시겠습니까? – 123

    +2

    열 또는 행을 의미합니까? – VMai

    +2

    원하는 모든 열을 다시 가져올 수 있습니다. 귀하의 질문에 당신이 원하는 열을 말하지 않았습니까, 당신은 단지 "일부 열"이라고 말했다. 선택 목록을 수정하여 원하는 열을 다시 가져 오거나 질문에 원하는 열을 지정하십시오. 열을 다시 가져 오도록 변경합니다. –

    관련 문제