2011-11-24 3 views
0

동일한 필드를 사용하여 3 개의 테이블과 2 개의 쿼리를 시도하는 데 문제가 있습니다. PHP와 MySQL두 테이블에서 같은 필드를 쿼리 MYSQL

예를

TableA의 쿼리에 TableB의 TableC

키워드를 사용하면 검색어가 될 것입니다.

SELECT 
    title 
FROM TableA as A 
LEFT JOIN TableC as C 
    ON TableA.id=TableC.id 
WHERE 1 
    AND TableC.private='0' 
    AND ( 
     title LIKE '".$keyword."%' 
    OR title LIKE '%".$keyword."%' 
    OR title LIKE '%".$keyword."' 
    OR title = '".$keyword."' 
    ) 

내가 가지고있는 문제는 제목을 동시에 검색하고 동일한 키워드를 기반으로 일치를 수행해야한다는 것입니다. TableB 제목 필드를 쿼리에 통합하려면 어떻게합니까?

title = American 인 TableA와 title = American 인 TableB가 있다고 가정하면 LIKE 쿼리와 일치하므로 두 테이블의 결과가 모두 표시됩니다.

그런 다음 PHP로 결과를 보여줍니다. TableA 또는 TableB가 일치하면 결과가 표시됩니다. 그리고 배열 등을 반복하십시오.

검색 매개 변수로 사용하기 때문에 쿼리에 있어야합니다. TIA

+0

가서 읽어 보시기 바랍니다에 대한 [PDO (http://php.net/PDO)와 준비된 문을. 그리고 자신을 사거나 훔칩니다 (SQL Antipatterns) (http://pragprog.com/book/bksqla/sql-antipatterns). –

+0

@ tereško 더 많은 SQL 자습서를 살펴 봐야 할 것입니다. 나는 PHP만큼이나 많은 도움을 필요로했다. thx –

답변

3

노조 수행

SELECT title FROM TableA as A LEFT JOIN TableC as C ON TableA.id=TableC.id WHERE 1 AND TABLEC.private='0' AND (title LIKE '".$keyword."%' OR title LIKE '%".$keyword."%' 
      OR title LIKE '%".$keyword."' OR title = '".$keyword."') 
UNION 
SELECT title FROM TableB as B LEFT JOIN TableC as C ON TableB.id=TableC.id WHERE 1 AND TABLEC.private='0' AND (title LIKE '".$keyword."%' OR title LIKE '%".$keyword."%' 
      OR title LIKE '%".$keyword."' OR title = '".$keyword."') 
+0

좋아요, 저는 노동 조합이 테이블에 같은 열을 가져야한다고 생각했습니다. 시도해 볼게. –

+0

TableB에는 TableA가하는 ID 테이블이 없기 때문에 오정렬이 작동하지 않습니다. 그래서 나는 같은 쿼리를 할 수 없다. 그들은 동일한 테이블이 아닙니다. 한 테이블이 노래 테이블이고 다른 테이블이 즐겨 찾기 테이블입니다. 둘 다 제목 필드가 있으며 다른 데이터를 가질 수 있습니다. 일치하는 항목이있는 경우 노래 제목이나 즐겨 찾기 제목을 표시하거나 일치하는 항목이 많이 표시되도록하고 싶습니다. –

+0

union의 각 쿼리는 동일한 수의 열을 가져야하며 각 해당 열에 대해 동일한 데이터 유형이 있어야합니다. 다른 모든 것은 유효합니다. –

관련 문제