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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog