0

この質問を何と呼べばよいかわかりません。私はそれについて多くのことを考えてきました、そして私が選んだものがそれを十分にカバーしているとは思いませんが、それは私が管理できる最高のものでした. それが非常に誤解を招くか間違っている場合はご容赦ください。

個人用の小さなCMSを作成していますが、トラブルに遭遇しました。

情報は MySQL データベースに保存され、テーブルにはcidpage、およびcontの 3 つの列があります。

cid は、特定のコンテンツの識別子です。テキストのメイン領域とテキストのサブ領域など、ページに複数のコンテンツがある場合、これらの行のcidは異なりますが、コンテンツが同じページにあるため、ページは同じです

CMS のインデックス ページでは、データベースに存在するすべての異なるページをリンクとして表示しています。ユーザーは、コンテンツを変更したいページへのリンクをクリックします。

さて、ここに私の問題があります:

データベースからのデータを表示する場合、ページが同じでcidが異なる行は、論理的には別のリンクとして表示されます。

それは混乱しているように聞こえました。私は別の言い方をします:

必要なのは、結果に別の結果と同じページがある場合、これら 2 つが 1 つのリンクにマージされ、2 つの別個のリンクとして表示されないことです。

データベースは次のようになります。

+------------+----------+-----------------------------------------+                                                                           
| 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 ループで 1 つの結果にマージする必要があります。これは、2 つの異なる結果に分離されるためです。これは私のループとクエリです:

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

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

もちろん、同じページを持っていても、2 つの結果が表示されます。それが私がしなければならないPHPなのか、それともMySQLクエリにあるのかはわかりません。私は SQL には少し慣れていませんが、PHP にはかなりの経験があります。

私はいくつかのifsについて考えてきました。同様に、表示されるすべての新しい結果を変数に保存してからそれらを比較し、以前に発生した結果が再び発生した場合、それは表示されないか何か。しかし、私は知りません。

誰かがここで私を助けてくれたら素晴らしいことです。

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 に答える