2016-10-27 3 views
1

두 개의 select 문을 결합 할 수있는 방법을 궁금해합니다.여러 개의 select 문을 결합한 MySQL

 $searchCat = $mysqli->query("SELECT category_id, category.name FROM category WHERE category.name = '$searchTerm'"); 

    while ($r=$searchCat->fetch_assoc()) { 
     $category_id=$r["category_id"]; 

     $searchBus = $mysqli->query("SELECT business.name, business.street FROM business WHERE business.category_id = '$category_id'");    

     while ($r=$searchBus->fetch_assoc()) { 
      $name=$r["name"]; 
      $street=$r["street"]; 

      echo "$name, $street<br>"; 
     } 
    } // end of while 

출력을 위해 나는 단지 첫번째 선택 이드는 또한 비즈니스 테이블에 보관되어 있는지 검색 한 기간의 상관 관계 ID를 발견, 비즈니스 테이블에서 데이터를해야합니다.

그래서 첫 번째 선택에서 ID를 가져온 다음 두 번째 선택 항목으로 전달되어 첫 번째 While을 건너 뛸 수 있도록 결합 또는 결합을 수행 할 수 있습니까? SQL 주입에 그것의 현재 열려는

+10

** 경고 ** : 당신이 [매개 변수가있는 쿼리를 (사용해야 mysqli''사용하는 경우 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) 및 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php)을 사용하여 쿼리에 사용자 데이터를 추가하십시오. ** 심각한 [SQL injection bug] (http://bobby-tables.com/)를 만들었 기 때문에 문자열 보간이나 연결을 사용하여 **이를 수행하지 마십시오. **'$ _POST' 또는'$ _GET' 데이터를 쿼리에 직접 입력하지 마십시오. 실수로 누군가를 악용하려고 시도하면 매우 위험 할 수 있습니다. – tadman

답변

2

당신은 너무 단일 쿼리로 만들 수 있습니다.

$query = "SELECT `business`.`name`, `business`.`street` 
      FROM `business`, `category` 
      WHERE 
      `business`.`category_id` = `category`.`category_id` 
       AND 
      `category`.`name` = '$searchTerm'"; 

$searchBus = $mysqli->query($query); 
+0

고마워! 'category'.'name' = '$ searchTerm'비트가 저를 던지고 있었어요 – harkly

+0

그것은 성공 했습니까? 아니요. @harkly –

+0

죄송합니다. 나는 그걸로 놀고 있었어. – harkly

1
SELECT category_id, category.name 
FROM category c inner join business b using (category_id) 
WHERE category.name = {Term} 

쿼리를 탈출하십시오

SELECT business.name, business.street 
FROM business 
WHERE EXISTS (SELECT * 
       FROM category 
       WHERE category.name = '$searchTerm' AND 
         category.category_id = business.category_id) 
+0

감사! 나는 일단 모든 것이 알아내어지고 일하면 내가 도망 갈 것이다. – harkly

1

당신은 exists 연산자를 사용할 수 있지만

1
SELECT business.name, business.street, category.name 
FROM business 
JOIN category ON category.category_id = business.category_id 
WHERE category.name = '$searchTerm' 
0
SELECT business.name, business.street 
FROM category c, business b 
WHERE c.category_id = b.category_id and c.name = '$searchTerm' 
관련 문제