2017-03-14 1 views
0

현재 다양한 ID를 찾고있는 세 테이블에 걸쳐있는 쿼리를 만들려고합니다.하지만 ID가 어떤 테이블에서 왔는지 알아야합니다.MySQL PDO UNION 쿼리에서 결과가 나온 테이블을 찾습니다

$searchQuery = 'LS7 2UP'; 

$stmt = $db->prepare(" 
SELECT id as 'nameSearchID' FROM user WHERE recordStatus=1 AND CONCAT(forename, ' ', surname) LIKE :nameSearch 
UNION ALL 
SELECT clientID AS 'salesOrderClientID' FROM salesOrder WHERE recordStatus=1 AND salesOrderID LIKE :salesOrderID 
UNION ALL 
SELECT id AS 'addressID' FROM address WHERE recordStatus=1 AND postcode LIKE :searchPostcode 
"); 

$stmt->bindValue(':nameSearch', "%$searchQuery%", PDO::PARAM_STR); 
$stmt->bindValue(':salesOrderID', "%$searchQuery%", PDO::PARAM_STR); 
$stmt->bindValue(':searchPostcode', "%$searchQuery%", PDO::PARAM_STR); 

$stmt->execute(); 
$rowCount = $stmt->rowCount(); 
$resultsOrig = $stmt->fetchAll(PDO::FETCH_ASSOC); 

이는 어드레스 테이블 찾는 2 개 결과를 출력하지만 '사용자'표 으로 나타낸 것.

아이디어가 있으십니까?

Array 
(
    [0] => Array 
     (
      [nameSearchID] => 69e17996-93be-4562-ad55-49ac62801bba 
     ) 

    [1] => Array 
     (
      [nameSearchID] => 135e4e26-869d-44cc-b400-383e884923ea 
     ) 

) 
+0

그것을 고정! $ STMT = $ DB-> WHERE recordStatus = 1 AND CONCAT (뒤따라야 '사용자로부터 (" 사용자 선택과 같은'사용자 'ID 준비'성) 같은 nameSearch 연합 모든 선택 'SalesOrder를'SalesOrder를 등을 , clientID from salesOrder where recordStatus = 1 AND salesOrderID LIKE : salesOrderID 합집합 all 주소로 'address'를 선택하고 WHERE recordStatus = 1 AND postcode LIKE : searchPostcode "주소에서 ID를 선택합니다. –

답변

0

매개 변수로 추가

SELECT id as 'nameSearchID', "user" FROM user WHERE recordStatus=1 AND CONCAT(forename, ' ', surname) LIKE :nameSearch 
UNION ALL 
SELECT clientID AS 'salesOrderClientID', "salesOrder" FROM salesOrder WHERE recordStatus=1 AND salesOrderID LIKE :salesOrderID 
UNION ALL 
SELECT id AS 'addressID', "address" FROM address WHERE recordStatus=1 AND postcode LIKE :searchPostcode 
" 
관련 문제