2012-06-06 2 views
0

나는이 문제에 붙어있다 내가 MySQL과 PHP에서 안돼서에 표시, 여기 코드는 첫 번째 :CSV를 포함하는 두 개의 서로 다른 테이블을 가입하고 웹 페이지

$metros = array(1,263); 
foreach($metros as $metro_id) { 
    $sql = "SELECT cuisine_id, cuisine_name_en FROM poi_restaurant_cuisines"; 
    $result = mysql_query($sql); 
    $cuisine_id = array(); 
    $cusine_name = array(); 
    while($row = mysql_fetch_assoc($result)) { 
     $cuisine_id[] = $row['cuisine_id']; 
     $cuisine_name[] = $row['cuisine_name_en']; 
    } 

    foreach ($cuisine_id as $cuisine) { 
     $sql = " 
      SELECT COUNT(*) 
      FROM poi AS p 
       LEFT JOIN poi_restaurant AS pr USING (poi_id) 
      WHERE p.poi_address_prefecture_id = '$metro_id' 
       AND pr.poi_restaurant_cuisine_id_array 
       AND find_in_set('$cuisine', poi_restaurant_cuisine_id_array) 
       AND p.poi_status = 1"; 

     $result = mysql_query($sql); 
     $count_cuisine = array(); 

     while($row = mysql_fetch_array($result)) { 
      $count_cuisine[$metro_id][$cuisine] = $row['COUNT(*)']; 
     } 

     echo "<table border = 1 cellpadding= 5 cellspacing= 5 width= 100>"; 
     echo "<tr><th>CuisineID</th><th>Count</th></tr>"; 
     echo "<tr><td>"; 
     echo $cuisine; 
     echo "</td><td>"; 
     echo $count_cuisine[$metro_id][$cuisine]; 
     echo "</td><td>"; 
     echo "</tr>"; 
     echo "</table>"; 
    } 
} 

poi_restaurant_cuisine_id_array에는 csv 값이 들어 있습니다. 웹 페이지에서 수와 요리 ID를 생성 할 수 있습니다. 나는 요리 ID를 요리의 이름으로 바꾸고 싶다. 나는 초보자이므로 SQL 또는 PHP 중 하나에서 좋지 않습니다. 내가 충분히 명확 해 졌으면 좋겠다. 어떤 도움이라도 대단히 감사합니다 ... 감사합니다.

답변

0

이 시도 :

echo '<table border="1" cellpadding="5" cellspacing="5" width="100">'; 
echo "<tr><th>Cuisine</th><th>Count</th></tr>"; 

$metros = array(1,263); 
foreach($metros as $metro_id) { 
    $sql = "SELECT cuisine_id, cuisine_name_en FROM poi_restaurant_cuisines"; 
    $result = mysql_query($sql); 
    $cuisines = array(); 
    while($row = mysql_fetch_assoc($result)) { 
     $cuisines[] = array(
      'id' => $row['cuisine_id'], 
      'name' => $row['cuisine_name_en'], 
     ); 
    } 

    foreach ($cuisines as $cuisine) { 
     $sql = " 
      SELECT COUNT(*) 
      FROM poi AS p 
       LEFT JOIN poi_restaurant AS pr USING (poi_id) 
      WHERE p.poi_address_prefecture_id = '$metro_id' 
       AND pr.poi_restaurant_cuisine_id_array 
       AND find_in_set('{$cuisine['id']}', poi_restaurant_cuisine_id_array) 
       AND p.poi_status = 1"; 

     $result = mysql_query($sql); 
     $count_cuisine = array(); 

     while($row = mysql_fetch_array($result)) { 
      $count_cuisine[$metro_id][$cuisine['id']] = $row['COUNT(*)']; 
     } 

     echo "<tr> 
      <td>{$cuisine['name']}</td> 
      <td>{$count_cuisine[$metro_id][$cuisine['id']]}</td>"; 
     </tr>"; 
    } 
} 

echo "</table>"; 
+0

@ shadyx 답변에 감사 드리며 효과가있었습니다. 다른 질문으로 귀찮게해서 죄송합니다. 루프 내부의 테이블에 echo 문을 사용할 때 페이지의 열 이름이 반복됩니다. 이를 피할 수있는 방법이 있습니까? 문제는 루프 외부에서 사용하면 값을 제대로 얻지 못한다는 것입니다. – Uday

+0

@Uday 위의 수정 된 코드를 확인하십시오. – shadyyx

+0

정말 고마워요. 일했다 :) – Uday

0

가정 cuisine_id 고유 식별자이고, 다음 단의 배열 인덱스로 사용 ....

while($row = mysql_fetch_assoc($result)) { 
    $cuisines[$row['cuisine_id']] = $row['cuisine_name_en']; 
} 
.... 
foreach ($cuisines as $cuisine_id=>$cuisine_name_en) { 

그러나 하나의 컬럼에 복수의 값을 저장하는 인 매우 나쁜 생각.

루프에서 쿼리를 생성하고 실행하는 것은 또 다른 입니다. 나쁜 아이디어입니다.

내부 루프 외부에서 선언되고 호출되는 단일 쿼리로 줄일 수는 있지만 데이터가 표준화되지 않았기 때문에 이는 다소 복잡합니다.

+0

정말 고마워. 나는 하나의 열에 여러 개의 값을 저장하는 것은 좋지 않지만 상황은 레스토랑이 여러 개의 요리를 제공 할 수 있다는 것을 받아 들인다. 그래서 우리는 그 특정 레스토랑과 관련된 모든 요리를 저장해야합니다. 그러나 질문에 대답하기 위해 시간을내어 정말로 감사드립니다. – Uday

+0

이 시나리오는 정규화 된 데이터베이스를 사용하는 것을 방해하지 않습니다. – symcbean

관련 문제