在我的页面中,我有一个内容块,我希望在其中显示某些附加信息。对于多个页面,此信息可以相同,但也可以在一个特定项目上显示项目。
我正在考虑不同的方法,但在我看来,我所有的解决方案似乎都太详尽,或者我无法想象没有更聪明的解决方案。
考虑下面的表(列名与原始数据库不同,我在不同的表中不使用相同的名称)我对内容有所了解。
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>
我想要的结果考虑在内:
有人对这种情况有所了解吗?
答案 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());