2013-08-19 2 views
0

나는 최선을 다해 설명하려고 노력할 것입니다. MySQL에서 데이터를 가져 오는 두 가지 쿼리가 있습니다. 하나는 공원 리뷰에 대한 데이터를 가져오고, 다른 하나는 타고 리뷰에 대한 데이터를 가져옵니다. 두 쿼리는 모두 Review Date으로 정렬됩니다.하나의 foreach에 두 개의 서로 다른 쿼리를 결합한

내가 웹 페이지에서 원했던 리뷰는 Review Date 순으로 정렬 된 리뷰 목록입니다. 따라서 공원 리뷰와 라이드 리뷰가 하나의 목록에 함께 혼합됩니다.

거의 두 개의 foreach 루프가 실행되는 것과 비슷하지만 각 쿼리에 하나씩 있지만 날짜를 기준으로 차례로 가져옵니다.

$query5= 'SELECT review_id, review, tpf_reviews_parks.user, DATE_FORMAT(date_visited, "%d %M %Y") AS Date_Visited, DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date, rating, tpf_parks.name, country 
FROM tpf_reviews_parks 

INNER JOIN tpf_ratings_parks ON tpf_reviews_parks.rating_link = tpf_ratings_parks.rating_id 
INNER JOIN tpf_parks ON tpf_reviews_parks.park_id = tpf_parks.park_id 

ORDER BY review_date DESC, review_id DESC LIMIT '.$start_from.' , '.$limit.''; 

이 나는 ​​결과를 표시하는 방법 따로있다 : 타고 :

foreach ($res4 AS $row4) { 
      printf(' 
      <h2 style="display:inline;">%s</h2> <h3 style="display:inline;">- %s, %s</h3> 
      <h3>Rating - %sStars</h3> 
      <h4>Submitted by %s on %s</h4> 
      <p>%s</p>' . PHP_EOL, $row4['ride_name'], $row4['park_name'], $row4['country'], $row4['rating'], (htmlspecialchars($row4['user'], ENT_QUOTES, 'UTF-8')), $row4['Review_Date'], nl2br(htmlspecialchars($row4['review'], ENT_QUOTES, 'UTF-8'))); 

      if(!empty($row4['Date_Ridden'])){ 
      printf('<p>Date ridden: %s</p>' . PHP_EOL, $row4['Date_Ridden']); 
      } 

      printf('<a class="bloglink" href="#top">Back to Top</a> 
      <hr>'); 

     } 


    For PArks: 

foreach ($res5 AS $row5) { 
    printf(' 
    <h2 style="display:inline;">%s</h2> <h3 style="display:inline;">- %s</h3> 
    <h3>Rating - %sStars</h3> 
    <h4>Submitted by %s on %s</h4> 
    <p>%s</p>' . PHP_EOL, $row5['name'], $row5['country'], $row5['rating'], (htmlspecialchars($row5['user'], ENT_QUOTES, 'UTF-8')), $row5['Review_Date'], nl2br(htmlspecialchars($row5['review'], ENT_QUOTES, 'UTF-8'))); 

    if(!empty($row4['Date_Ridden'])){ 
    printf('<p>Date Visited: %s</p>' . PHP_EOL, $row4['Date_Visited']); 
    } 

    printf('<a class="bloglink" href="#top">Back to Top</a> 
    <hr>'); 

} 
타고 공원에 대한

$query4= 'SELECT review_id, review, tpf_reviews_rides.user, DATE_FORMAT(date_ridden, "%d %M %Y") AS Date_Ridden, DATE_FORMAT(review_date, "%d %M %Y") AS Review_Date, tpf_rides.name AS ride_name, rating, tpf_parks.name AS park_name, country 
FROM tpf_reviews_rides 

INNER JOIN tpf_rides ON tpf_reviews_rides.ride_id = tpf_rides.ride_id 
INNER JOIN tpf_ratings_rides ON tpf_reviews_rides.rating_link = tpf_ratings_rides.rating_id 
INNER JOIN tpf_parks ON tpf_reviews_rides.park_id = tpf_parks.park_id 

ORDER BY review_date DESC, review_id DESC LIMIT '.$start_from.' , '.$limit.''; 

를 들어 :

은 두 쿼리입니다

이 페이지를 더 까다롭게 만들기 위해 페이지가 매겨집니다. 두 개의 쿼리가 비슷하기 때문에 쿼리 수준에서 결합하는 것이 가장 좋으며 페이지 매기기 코드를 현명하게 유지하는 데 도움이됩니다. 누구든지 이걸 어떻게 달성 할 수 있는지에 대한 제안이 있습니까?

감사

답변

0

당신은 두 개의 선택 문을 병합 UNION를 사용할 수 있습니다.

테이블이 너무 비슷하면 병합하는 것이 더 좋습니다 (쿼리가 아니라 실제 테이블). tpf_reviews_rides에 비해 전혀 일치하지 않는 입력란은 tpf_reviews_parks과 비교할 수 없습니다. 검토 유형 (탑승구 또는 공원)을 나타내는 열을 추가하고 설정해야합니다. 쿼리 및 처리 논리를 단순화합니다.

+0

답변을 읽고 조금 더 살펴보면 귀하의 권리라고 생각하며 두 테이블을 병합 할 것입니다. 감사 – user2574794

관련 문제