AJAX (PHP 백엔드)를 통해 데이터베이스에 쿼리를 보내고 싶습니다. 회사, 사용자, 송장, Invoice_Lines 4 테이블 있습니다. 나는 그것의 구성 요소 (열, 테이블 및 조건)에 제출 된 SQL 쿼리를 깨뜨릴 PHP에서 간단한 파서를 작성했습니다SQL SELECT에 조건을 삽입하는 방법은 무엇입니까?
Users.Company_ID -> Companies.ID
Invoices.Company_ID -> Companies.ID
Invoice_Lines.Invoice_ID -> Invoices.ID
다음과 같이 중요한 관계이다.
사용자가 쿼리를 직접 작성할 수는 있지만 SQL Server에 제출하기 전에 수정하여 모든 정보가 로그인 한 사용자의 회사 ID로 제한되도록하고 싶습니다. 예를 들면 : 나는 쿼리를 원하는
SELECT Users.ID, Users.Name, Users.Email
FROM Users
가되기 위해 : 더 복잡한 예에서
SELECT Users.ID, Users.Name, Users.Email
FROM Users
WHERE Users.Company_ID = X
:
SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
WHERE Invoice_Lines.Invoice_ID = 4
가되다
SELECT Invoice_Lines.Subtotal
FROM Invoice_Lines
INNER JOIN Invoices ON (Invoice_Lines.Invoice_ID = Invoice.ID)
INNER JOIN Company ON (Invoice.Company_ID = Company.ID)
WHERE Invoice_Lines.Invoice_ID = 4 AND Company.ID = X
그것은 분명 보인다 나는 테이블 별칭을 만들어야 할 것이다. 이미 작성된 진술과 충돌하지 마십시오. 가장 효율적인 방법이 입력을 제한하는 것을 결정하기 위해 쿼리를 분석하는 방법에 대해서는 확신 할 수 없습니다.
SQL의 하위 집합 (별칭이있는 직접 테이블 열, 테이블과 별칭이있는 왼쪽 조인과 내부 조인 및 간단한 식)을 지원할 예정입니다.
여기에 고무 덕킹이 대부분입니까? 내가 진짜 질문을하는지 확신하지 못한다. 비슷한 프로젝트를 여러 번 해본 적이 있는데 "SQL"을위한 OOP 인터페이스를 갖는 것이 유용 할 수 있다는 것을 알게되었습니다. ['Zend_Db_Select'] (http://framework.zend.com/manual/1.12/ko/zend.db.select.html)가 떠오른다. 주요 이점은 'from'및 'joins'까지 전체 SQL 문을 작성한 다음 쿼리에 사용 된 실제 열을 기반으로 필요한 항목에만 조인하는 것입니다. – ficuscr
입력 및 출력을 알고 있지만 분석 부분에 문제가 있습니다. 나는 모든 쿼리를 위해 그것을 손으로 할 수 있지만, 나를 위해 그것을 변환 할 일반적인 알고리즘을 상상할 수 없다. 아마도 INNER JOINs 톤을 추가하게 될 것입니다. – Martin