将多个数据库结果合并为一个

时间:2013-08-15 22:32:47

标签: php mysql sql

我不确定该怎么称呼这个问题。我一直在思考这个问题,我并不认为我所选择的内容足以涵盖它,但这是我能管理的最好的。如果它有误导性或不正确,请原谅我。

我正在创建一个供个人使用的小型CMS,但我遇到了麻烦。

信息存储在MySQL数据库中,该表有三列: cid page cont

cid是某段内容的标识符。如果页面有多个内容,例如文本的主区域和文本的子区域,这些行上的 cid 会有所不同,但 >页面将是相同的,因为内容在同一页面上。

在CMS的索引页面上,我将显示数据库中存在的所有不同页面作为链接。然后,用户单击指向他想要更改内容的页面的链接。

现在,这是我的问题:

从数据库显示数据时,具有相同页面但不同 cid 的行在逻辑上显示为单独的链接。

这听起来令人困惑。我会用不同的方式说:

我需要的是如果结果与另一个结果具有相同的,则这两个被合并到一个链接中,而不会显示为两个单独的链接。

这是数据库的外观:

+------------+----------+-----------------------------------------+                                                                           
| cid        | page     | cont                                    |
+-----------------------------------------------------------------+  
| page1-main | page1    | This is the first page on this website! |        
| page2-main | page2    | This is the second page!                |                                                                                                                                 
| page2-sub  | page2    | This is sub-content!                    |                                                                  
+------------+----------+-----------------------------------------+

正如我所说,我想要的是将任何具有相同页面的行合并到我的while循环中的一个结果中,因为现在发生的是它们被分成两个不同的结果。这是我的循环和查询:

$query = mysqli_query("SELECT * FROM content");

while($row = mysqli_fetch_array($query))
  {
   ?>
     <a href="edit.php?p=<?php echo $row['page'];?>">Link!</a>
   <?php
  }

当然,即使它们具有相同的页面,也会显示两个结果。我不确定它是否是我将要做的一些PHP,或者它是在MySQL查询中。我对SQL很有经验,但在PHP方面经验丰富。

我一直在考虑一些ifs。比如,存储在变量中显示的每个新结果然后比较它们,如果之前发生的那个结果再次出现,那么它就不会显示,或者某些东西。但我不知道。

如果有人能帮助我,那会很棒。

2 个答案:

答案 0 :(得分:0)

> what I want is to have any rows that have the same page
> be merged into one result 

您可以使用GROUP BY合并它们:

$ query = mysqli_query(“SELECT * FROM content GROUP BY page”);

答案 1 :(得分:0)

这些查询将返回等效结果:

SELECT page FROM content GROUP BY page;

SELECT DISTINCT page FROM content ORDER BY page;

如果您不需要返回page以外的列,请替换查询中的*(这是“所有列”的简写,而是仅引用您实际的列需要退货。)