doupo2633 2013-01-21 09:07
浏览 52
已采纳

动态表中的动态表(PHP / MySQL)

  1. I have two MySQL tables in the same database, each with data.
  2. I have a PHP results page that shows the data from the first MySQL table in a dynamic PHP table.
  3. One of the fields in the first MySQL table is a comma-separated list of IDs that relate to data in the second MySQL table.
  4. I have a second, nested/embedded dynamic PHP table within the first dynamic PHP table that pulls the data from the second MySQL table when the row ID appears in the comma-separated field of the first MySQL table. (i.e. one of the columns in the first dynamic PHP table contains the second, nested dynamic PHP table with data from the second MySQL table

See the PHP/HTML below:

<?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);
?>

Now, when ever I run the page the following happens:

  • If there is only one item in the nested table (i.e. only one ID from the second table appears in the comma-separated field of the first table), then it renders perfectly.
  • However, if there is more than one (i.e. multiple IDs in the comma-separated field), then it renders the first item out to infinity (and crashes the browser).

What am I doing wrong? Clearly, nested tables is not the right way of doing what I am trying to do! n00b But what is?

  • 写回答

2条回答 默认 最新

  • douqiaoru2583 2013-01-21 09:17
    关注

    Remove the fav_food column from the first table, then add a 3rd table - fav_food:

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

    Then, use a JOIN to select all of John's favorite foods, with details:

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

    (use a different query to select John's details)

    In general, as you said, nested tables is not the best idea when you can use a regular table with JOIN.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面