0

私のページには、その横に特定の追加情報を表示したいコンテンツのブロックがあります。この情報は複数のページで同じである可能性がありますが、アイテムを1つの特定のアイテムに表示することもできます。

私はさまざまなアプローチについて考えていますが、私の意見では、すべての解決策が網羅的すぎるか、より賢い解決策がないことを想像することはできません。

次の表を検討してください(列名は元のデータベースとは異なります。異なる表で同じ名前を使用していません)。コンテンツに使用しています。

fe_content:
+----+--------+----------+-------------------+
| id |  page  | pagelink |      content      |
+----+--------+----------+-------------------+
| 1  | page 1 |  page_1  | Content of page 1 |
| 2  | page 2 |  page_2  | Content of page 2 |
| 3  | page 3 |  page_3  | Content of page 3 |
| 4  | page 4 |  page_4  | Content of page 4 |
| 5  | page 5 |  page_5  | Content of page 5 |
+----+--------+----------+-------------------+

追加データに対する私のアプローチは次のようなものです。

fe_blocks:
+----+---------+-------+---------+----------+--------------------+
| id |  block  | order | display | pagelink |      content       |
+----+---------+-------+---------+----------+--------------------+
| 1  | block 1 |   1   | always  |          | Content of block 1 |
| 2  | block 2 |   2   | always  |          | Content of block 2 |
| 3  | block 3 |   1   | single  |  page_1  | Content of block 3 |
| 4  | block 4 |   3   | always  |          | Content of block 4 |
| 5  | block 5 |   4   | single  |  page_3  | Content of block 5 |
+----+---------+-------+---------+----------+--------------------+

だから今、私がページを表示したいとき、私は使用します:


$result = mysql_query("
    SELECT content
    FROM fe_content
    WHERE pagelink = '"._mysql_real_escape_string($_aGET[0])."'
") or die(mysql_error());
$show = mysql_fetch_assoc($result);
echo("<div> ".$show['content']." </div>\n\n<aside>\n");

$result = mysql_query(" SELECT content FROM fe_blocks WHERE pagelink = '".mysql_real_escape_string($_aGET[0])."' or display = 'always' ORDER BY order ASC ") or die(mysql_error()); while($show = mysql_fetch_assoc($result)){ echo("<p>".$show['content']."</p>\n"); } echo("</aside>");

これは私に望ましいブロックを与えますが、いくつかの障害があります。

私がリクエストしたとするとpage_1、私の出力は次のようになります


<div> Content of page 1 </div>
<aside>
<p>Content of block 1</p>
<p>Content of block 2</p>
<p>Content of block 3</p>
<p>Content of block 4</p>
</aside>

代わりにこれを取得したいのですが:


<div> Content of page 1 </div>
<aside>
<p>Content of block 3</p>
<p>Content of block 1</p>
<p>Content of block 2</p>
<p>Content of block 4</p>
</aside>

私の望ましい結果は考慮に入れます:

  • 重要性。特定のページに表示されるアイテムの順序は、常に表示されるアイテムの順序よりも重要であると見なす必要があります(たとえば、却下)。
  • ほとんどいつも。おそらく、いくつかのアイテムは、いくつかを除いて、ほとんどすべてのページに表示されるはずです。将来の変更に関しては、ブロックを表示するページごとに適切なページリンクを含む新しい行をデータベースに挿入するのは便利ではありません。

この状況について誰かが考えていますか?

4

3 に答える 3

0

あなたはこのように注文することができます:

ORDER BY order ASC, display ASC

したがって、同じ注文番号では、「常に」が前に来ます

または「表示」をより重要視したい場合

ORDER BY display ASC, order ASC
于 2012-04-11T09:01:10.030 に答える
0

ページがあり、ブロックがあります。1つのブロックを複数のページに表示する場合は、エンティティ間のn:m接続を保存するのに役立つ新しいテーブルを作成する必要があります。特定のブロックが特定のページにある順序を保存する場所です。基本的に-データを正規化します。

于 2012-04-11T09:03:26.917 に答える
0

2番目のクエリステートメントを次のように変更します。

$result = mysql_query("
SELECT content
FROM fe_blocks
WHERE pagelink = '".mysql_real_escape_string($_aGET[0])."' or display = 'always'
ORDER BY order ASC, display ASC ") or die(mysql_error());
于 2012-04-11T09:05:26.053 に答える