2011-05-06 5 views
1

첫째로, 외래 키를 사용하는 더 좋은 방법이 있는지 말해 줄 수 있습니까? 나는 한 번 읽었지만 실제로 사용법을 이해하지 못했습니다.도움말 MYSQL 쿼리 만들기

데이터를 가져 오려는 두 개의 테이블이 있습니다. AccountDetails 및 AccountUsage 두 테이블에는 각 사용자에 대해 일치해야하는 고유 한 AccountID 인 AccountID가 있습니다.
AccountDetails 테이블의 AccountEmail과 사용자가 입력 한 값을 비교 한 다음 일치하는 항목이 있으면 두 테이블에서 모든 데이터를 가져와 AccountUsage의 데이터를 업데이트해야합니다. AccountUsage에서 데이터를 업데이트하기 위해 다른 쿼리가 필요할 수도 있지만 다른 방법이있을 경우에 대비하여 언급 했으므로 LastLogin을 오늘 날짜로 업데이트합니다.

그래서, 나는 나와 함께 스틸 희망, 이것은 내가 지금 가지고 코드, 그 모든 후

SELECT AccountID, AccountPassword, BandID FROM AccountDetails WHERE AccountEmail=? 

입니다 - 키 포인트는;

  • 외부 ID가 더 좋은 방법이 있습니까 (실제로 이것들이 관련이 있는지 모르는 경우).

  • 그렇지 않은 경우 쿼리를 도와 주겠다. 참여가 필요하다고 생각하십니까?

  • 오늘 LastLogin을 자동으로 업 데이팅하는 방법이 있습니까? 아니면 다른 쿼리가 필요합니까?


크리스

EDIT 정말 고마워요 :이 내가 (메신저 PHP는 OOP 응용 프로그램을 변환) 마지막으로 사용하는 코드입니다.

SELECT AccountUsage.AccountID, AccountUsage.AccountActive FROM AccountUsage INNER JOIN AccountDetails ON AccountUsage.AccountID=AccountDetails.AccountID WHERE AccountDetails.AccountEmail=? 

이것은 첫 번째 테이블에서 데이터를 가져 오기 위해 이미 다른 쿼리를 실행 한 후이었습니다. 이상적으로는 1 개의 쿼리에서 모두이를 원합니다.

PHP로 배열로 반환 형식이 좋을 것입니다.

+0

나는 당신이 정말로 SQL에 대해 많이 읽은 다음 일부 응용 프로그램을 작성해야한다고 생각합니다. SQL을 소개하는 온라인 자습서를 얻으십시오. – Marcin

+0

예상되는 출력을 추가하십시오. –

+0

이것은 거의 모든 mysql 튜토리얼에서 다룰 수있는 매우 기본적인 질문입니다. 프로젝트를 계속하기 전에 mysql 사용법을 읽어 볼 수는 있습니다. – eykanal

답변

1
  1. 전자 메일을 기반으로 사용자 데이터를 얻으려면 JOIN이 필요합니다. AccountID를 기반으로 테이블에 가입하게됩니다 (두 테이블에 모두 Primary Key이 있어야하므로 빠릅니다) 을 WHERE 절에서 테스트합니다. AccountEmail 열에 색인이 있어야하므로 빠른 것도 좋습니다.

    검색어 : 내가 AU에 AD와 AccountUsage에 AccountDetails를 별칭있다

    SELECT AD.AccountID, AD.AccountPassword, AD.BandID, AU.* 
    FROM AccountDetails AD 
    JOIN AccountUsage AU on AU.AccountID = AD.AccountID 
    WHERE AD.AccountEmail = ? 
    

    이 쉽게 테이블에 열을 명확하게하는 만드는, 당신은 전체 테이블 이름을 당신이 필요로 할 때마다 입력 할 필요가 없습니다 그것을 참조하십시오.

  2. 외래 키가 정말 당신이 여기에, 밖으로 데이터를 끌어 도움이되지 않습니다 별도의 UPDATE 쿼리를 실행해야 LastLogin를 업데이트합니다. Foregin Keys는 데이터 무결성을 유지하기 위해 만들어졌습니다.다시 AccountDetails으로 연결되는 AccountUsage의 AccountID에 대한 Foregin 키 제약 조건을 설정하면 AccountDetails의 행을 다시 참조하지 않는 AccountUsage에 행을 삽입 할 수 없습니다. 약간 혼란 스러울 지 모르지만 테이크 어웨이는 여기에 데이터를 가져올 필요가 없습니다. 이는 데이터와의 일관성을 유지하는 데 도움이되는 구조적 기능입니다.

+0

감사합니다. 완벽하게 작동합니다. 귀하의 코드를 편집하려면 2 개 이상의 테이블을 조인 할 수 있습니까? – Chris

+1

원하는 경우 100 개의 테이블을 조인 할 수 있습니다. 조인하려는 각 테이블에 대해'JOIN

ON '을 추가하고 원하는 SELECT 컬럼을 얻기 위해 SELECT를 편집해야합니다. –