0

我不确定如何称呼这个问题。我一直在考虑它,我不认为我选择的内容足以涵盖它,但这是我能做到的最好的。如果它非常具有误导性或不正确,请原谅我。

我正在创建一个供个人使用的小型 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 查询中。我在 SQL 方面有点缺乏经验,但在 PHP 方面相当有经验。

我一直在想一些如果。就像,将显示的每个新结果存储在一个变量中,然后将它们进行比较,如果之前发生的结果再次发生,那么它就不会显示,或者其他什么。但我不知道。

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

4

2 回答 2

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

于 2013-08-15T22:37:11.530 回答
0

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

SELECT page FROM content GROUP BY page;

SELECT DISTINCT page FROM content ORDER BY page;

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

于 2013-08-15T23:23:38.843 回答