2013-01-21 4 views
0
  1. 동일한 데이터베이스에 각각 데이터가있는 두 개의 MySQL 테이블이 있습니다.
  2. 동적 PHP 테이블의 첫 번째 MySQL 테이블의 데이터를 보여주는 PHP 결과 페이지가 있습니다.
  3. 첫 번째 MySQL 테이블의 필드 중 하나는 두 번째 MySQL 테이블의 데이터와 관련된 쉼표로 구분 된 ID 목록입니다.
  4. 행 ID가 첫 번째 MySQL 테이블의 쉼표로 구분 된 필드에 나타날 때 두 번째, 내포/내장 동적 PHP 테이블을 첫 번째 동적 PHP 테이블 내에 두 번째 MySQL 테이블의 데이터를 가져옵니다. 이제 때

    동적 테이블 내의 동적 테이블 (PHP/MySQL)

    <?php 
    if (!function_exists("GetSQLValueString")) { 
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    { 
        if (PHP_VERSION < 6) { 
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
        } 
    
        $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 
    
        switch ($theType) { 
        case "text": 
         $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
         break;  
        case "long": 
        case "int": 
         $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
         break; 
        case "double": 
         $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
         break; 
        case "date": 
         $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
         break; 
        case "defined": 
         $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
         break; 
        } 
        return $theValue; 
    } 
    } 
    
    mysql_select_db($database_TravelSite, $TravelSite); 
    $query_Route = "SELECT * FROM SavedRoutes WHERE RouteCode = '".$_GET['rc']."'"; 
    $Route = mysql_query($query_Route, $TravelSite) or die(mysql_error()); 
    $row_Route = mysql_fetch_assoc($Route); 
    $totalRows_Route = mysql_num_rows($Route); 
    ?> 
    <!doctype html> 
    <html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Untitled Document</title> 
    </head> 
    
    <body> 
    <p>&nbsp;</p> 
    <p>&nbsp;</p> 
    <table border="0"> 
        <tr> 
        <td>ID</td> 
        <td>StartPoint</td> 
        <td>StartPointLatLng</td> 
        <td>EndPoint</td> 
        <td>EndPointLatLng</td> 
        <td>Waypoints</td> 
        <td>Name</td> 
        <td>Details</td> 
        <td>RouteCode</td> 
        </tr> 
        <?php do { ?> 
        <tr> 
         <td><?php echo $row_Route['ID']; ?></td> 
         <td><?php echo $row_Route['StartPoint']; ?></td> 
         <td><?php echo $row_Route['StartPointLatLng']; ?></td> 
         <td><?php echo $row_Route['EndPoint']; ?></td> 
         <td><?php echo $row_Route['EndPointLatLng']; ?></td> 
         <td><p><?php echo $row_Route['Waypoints']; ?></p> 
        <?PHP $string = $row_Route['Waypoints']; 
    $slashstring = stripslashes($string); 
    $trimstring = rtrim($slashstring, "', '"); 
    mysql_select_db($database_TravelSite, $TravelSite); 
    ?> 
         <p>echo $trimstring = <?PHP echo $trimstring; ?></p> 
         <table border="0"> 
          <tr> 
          <td>id</td> 
          <td>Lng</td> 
          <td>Lat</td> 
          <td>Name</td> 
          </tr> 
          <?php 
          mysql_select_db($database_TravelSite, $TravelSite); 
    $query_Markers = "SELECT * FROM markers WHERE ID IN('".$trimstring."')"; 
    $Markers = mysql_query($query_Markers, $TravelSite) or die(mysql_error()); 
    $row_Markers = mysql_fetch_assoc($Markers); 
    $totalRows_Markers = mysql_num_rows($Markers); 
          do { ?> 
          <tr> 
           <td><?php echo $row_Markers['id']; ?></td> 
           <td><?php echo $row_Markers['Lng']; ?></td> 
           <td><?php echo $row_Markers['Lat']; ?></td> 
           <td><p> 
           <select multiple name="waypoints" id="waypoints"> 
            <?php 
    do { 
    ?> 
            <option selected value="<?php echo $row_Markers['Lat'] . ", " . $row_Markers['Lng']?>"><?php echo $row_Markers['Lat'] . ", " . $row_Markers['Lng']?></option> 
            <?php 
    } while ($row_Markers = mysql_fetch_assoc($Markers)); 
        $rows = mysql_num_rows($Markers); 
        if($rows > 0) { 
         mysql_data_seek($Markers, 0); 
         $row_Markers = mysql_fetch_assoc($Markers); 
        } 
    ?> 
           </select> 
           </p> 
           <p><?php echo $row_Markers['Name']; ?></p></td> 
          </tr> 
          <?php } while ($row_Markers = mysql_fetch_assoc($Markers)); ?> 
         </table> 
    <p>&nbsp;</p></td> 
         <td><?php echo $row_Route['Name']; ?></td> 
         <td><?php echo $row_Route['Details']; ?></td> 
         <td><?php echo $row_Route['RouteCode']; ?></td> 
        </tr> 
        <?php } while ($row_Route = mysql_fetch_assoc($Route)); ?> 
    </table> 
    </body> 
    </html> 
    <?php 
    mysql_free_result($Markers); 
    
    mysql_free_result($Route); 
    ?> 
    

    (즉, 첫 번째 동적 PHP 테이블의 열 중 하나는 아래의 PHP/HTML을 참조 두 번째 MySQL의 테이블

의 데이터를 두 번째, 중첩 된 동적 PHP 테이블을 포함 (두 번째 표는 첫째 테이블의 쉼표로 구분 된 필드에 나타납니다 에서 즉, 하나의 ID)는 중첩 테이블에서 하나 개의 항목 만있을 경우

  • : 지금까지 나는 다음과 같은 상황이 발생 페이지를 실행 , 그러면 완벽하게 렌더링됩니다.
  • 그러나 둘 이상 (예 : 쉼표로 구분 된 개의 ID에 여러 개의 ID가있는 경우)은 첫 번째 항목을 무한대로 렌더링하고 브라우저를 중단합니다.

내가 뭘 잘못하고 있니? 분명히 중첩 테이블은 내가하려는 것을 수행하는 올바른 방법이 아닙니다! n00b하지만 무엇입니까?

+0

관련 PHP 코드를 제공해 주실 수 있습니까? – hank

+0

또한 원하는 쿼리 결과의 체계를 제공하십시오. – Roy

+0

좋습니다, 장군님에 대해 이야기하는 것이 아니라 구체적으로 말하기가 쉽습니다. 원래 게시판을 편집합니다 – user1259798

답변

1

첫 번째 테이블에서 fav_food 열을 제거는 다음 3 테이블을 추가 - fav_food : 그럼

ID | fav_Food 
1 | 2 
1 | 4 
1 | 5 
1 | 12 

, 세부 사항, 요한의 좋아하는 음식을 모두 선택하려면이 가입 사용

SELECT * 
FROM `fav_food` JOIN `food` 
ON `food`.`ID`=`fav_food`.`fav_food` 
WHERE `fav_food`.`ID`=1 

(다른 쿼리를 사용하여 John의 세부 정보 선택)

일반적으로 JOIN을 사용하여 일반 테이블을 사용할 수있는 경우 중첩 테이블은 좋지 않습니다.

+0

좋아하는 음식 테이블을 만들 때 John은 자신이 가장 좋아하는 각각의 음식에 대해 새로운 항목을 만들어야합니까? 데이터를 만들 때 기본적으로 각 좋아하는 것을 추가 한 후 쉼표로 구분 된 필드에 입력되는 세부 정보가 표시됩니다. – user1259798

+1

아니요, 사용자 경험은 그대로 유지됩니다. 사용자 입력을 배열로 저장 한 다음 INSERT INTO ... VALUES (여기에 배열)를 사용하여 데이터베이스에 전달해야합니다. 자세한 내용은 설명서를 참조하십시오. – Roy

+0

Gotcha - 고마워요! – user1259798

1

더 나은 솔루션은 Fav_food를위한 별도의 테이블을 갖는 것입니다. 뭔가 같은 :

이 같은 것
ID | UserID | FoodID 
1 | 1 | 2 
2 | 1 | 4 
3 | 1 | 5 

: ... 존의 좋아하는 음식은 ID 2, 4, 5가 식품입니다 것은

+0

하지만 좋아하는 음식 표를 만들 때, John은 그의 가장 좋아하는 음식 각각에 대해 새로운 항목을 만들어야합니까? 데이터를 생성 할 때 기본적으로 틱 박스 (자세한 내용은 쉼표로 구분 된 입력란에 입력 됨)입니다. – user1259798

+0

예, 각 즐겨 찾는 음식에 대한 새로운 항목이 있습니다. 양식 (?)을 제출하면 모든 새로운 행을 추가하는 작은 반복을 수행 할 수 있습니다. – Kride

+0

@Kride 잘못된 것입니다. 사용자는 상자를 체크하고 한 번에 모든 선택을 보낼 수 있습니다. 또한 INSERT ... VALUES (여러 값)를 사용하여 하나의 쿼리 만 필요합니다. – Roy