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


Merge multiple database results into one

我不确定该怎么称呼这个问题。我一直在想这个问题,我不认为我所选择的足以涵盖它,但这是我能做到的最好的。如果它非常误导或不正确,请原谅我。

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

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

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查询中的PHP。我在SQL方面有点经验不足,但在PHP方面相当有经验。

我一直在想一些如果。比如,将显示在变量中的每个新结果存储起来,然后进行比较,如果以前发生的结果再次出现,则不显示,或者其他什么。但我不知道。

如果有人能在这里帮我,那就太好了。

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

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

SELECT page FROM content GROUP BY page;
SELECT DISTINCT page FROM content ORDER BY page;

如果不需要返回除page以外的列,则替换查询中的*(这是"所有列"的缩写,而只引用实际需要返回的列。)