在 PHP 中使用主/从 SQL 数据

Posted

技术标签:

【中文标题】在 PHP 中使用主/从 SQL 数据【英文标题】:Working with Master / Detail SQL Data in PHP 【发布时间】:2009-06-20 22:11:37 【问题描述】:

我是新手,请多多包涵。我正在做一个有趣的小论坛。检查它:

分类:

  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `position` int(11) NOT NULL,
   PRIMARY KEY (`id`)

论坛:

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `position` int(11) NOT NULL,
  `cat_id` int(11) NOT NULL,
   PRIMARY KEY (`id`)

我想知道我应该如何构造它,以便循环出它下面的类别和分配的论坛:/

我走对了吗?

  <?php
  $query = mysql_query("SELECT * FROM forums JOIN...");
  while ($row = mysql_fetch_array($query)) ..
  ?>

也许一些 sql 大师可以帮助我。

干杯!

【问题讨论】:

【参考方案1】:

如果您想在页面中显示包含论坛的类别,我怀疑您需要先获取类别的结果集,然后使用论坛列表的另一个循环遍历此列表。

连接将为您提供一个记录集,其中一列中包含类别,论坛在另一列中,为单个类别提供多行。正如另一个答案所说,您并不是真的在寻找加入:)

试试这样的:

$cat_rs = mysql_query("select id, name from categories");
while($cat_row = mysql_fetch_array($cat_rs))
     // print category name from $cat_row[1]
     $forum_rs = mysql_query("select name... from forums where cat_id = '" . $cat_row[0] ."'");
     while($forum_row = mysql_fetch_array($forum_rs))
        //print forum stuff
     

【讨论】:

与在一个查询中获取所有数据相比,在内部循环中进行这样的 mysql 查询会很慢。 你是对的,但我猜数据集很小,并且在 PHP 中进行所需的“选择不同”等效项的工作将涉及比适当的工作更多的工作;要么是带有条件的严重骇客,要么是构建分层数据集,这将成为一个更复杂的问题的主题:)【参考方案2】:

我认为您最好阅读join tutorial 以帮助您了解基础知识。

【讨论】:

【参考方案3】:

我不了解 PHP,但您似乎想使用单个查询来循环遍历类别,然后针对每个类别循环遍历论坛。

关系数据库不是这样工作的。查询以表的形式返回一组行。它没有父/子结构。

如果 PHP 能够做到这一点,您应该有一个父查询来返回所有类别,并循环访问它。对于每个类别,调用子查询以返回具有该类别 ID 的论坛。然后循环。

【讨论】:

以上是关于在 PHP 中使用主/从 SQL 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 脚本从下拉列表中更新 SQL 数据库

从android应用程序获取数据并使用php将其存储在sql数据库中

使用jsp从sql数据库中删除一个值

使用会话使用 php 从 sql 表中提取数据

使用 PHP 从 SQL Server 中选择数据

如何使用 SQL 和 PHP 从数据库 (phpMyAdmin) 的字段中获取/请求所有值?