PHP / MySQL显示/订购各种页面上的附加信息

时间:2012-04-11 08:55:26

标签: php mysql

在我的页面中,我有一个内容块,我希望在其中显示某些附加信息。对于多个页面,此信息可以相同,但也可以在一个特定项目上显示项目。

我正在考虑不同的方法,但在我看来,我所有的解决方案似乎都太详尽,或者我无法想象没有更聪明的解决方案。

考虑下面的表(列名与原始数据库不同,我在不同的表中不使用相同的名称)我对内容有所了解。

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>

我想要的结果考虑在内:

  • 重要性。特定页面上显示的项目顺序应被视为比始终显示的项目顺序更重要(例如否决)。
  • 几乎总是。也许有些项目应该显示在几乎所有页面上,除了少数几个。对于将来的更改,在数据库中插入一个新行并不方便为每个应显示该块的页面添加相应的页面链接。

有人对这种情况有所了解吗?

3 个答案:

答案 0 :(得分:0)

您可以这样订购:

ORDER BY order ASC, display ASC

因此,使用相同的订单号,“始终”出现在

之前

或者如果你想更加重视“显示”

ORDER BY display ASC, order ASC

答案 1 :(得分:0)

你有页面,你有块。如果您希望在多个页面上显示一个块,则应创建一个新表,以帮助您在实体之间存储n:m连接。多数民众赞成在哪里存储某些特定区块的订单。基本上 - 规范化您的数据。

答案 2 :(得分:0)

改变你的第二个查询语句,

$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());