Php Mysql,文章自定义CMS的标签

时间:2016-02-29 14:45:25

标签: php mysql mysqli

我正在为博客制作一个小型自制CMS。 目前我有简单的MySql数据库设置如下:

Database_diagram

对于主页面,我有一个index.php,它应该获取所有文章并打印出他们的名字,日期,摘录和本文所有标签。现在的问题是我不知道如何在每个文章的下面打印出所有文章的所有标签。

使用简单的mysqli来拉动和打印文章:

  $sql = "SELECT id, nazwa, data, wstep, imgs, zdj
  FROM art WHERE id BETWEEN $end AND $start ORDER BY id desc;";

$result = mysqli_query($link, $sql);
if(!$result){
  echo "Problem\n";
  echo "Kod problemu: ". mysqli_error($link);
  exit;
}

...

while ($row = mysqli_fetch_assoc($result)){
  $id = $row['id'];
//Barfing out all the content 
}

我想在fetch assoc中有第二个查询,但是当我这样做时,网站无法完全加载帖子。 还有另一种好方法吗?

1 个答案:

答案 0 :(得分:1)

为什么不修改您的查询以包含与文章一致的标签?我不确定这是不是你想要的,但用逗号连接起来很简单:

SELECT 
   a.id, 
   a.nazwa, 
   a.data, 
   a.wstep, 
   a.imgs, 
   a.zdj,
   GROUP_CONCAT(t.name) all_tags
FROM 
   art a INNER JOIN tagarts ta ON a.id = ta.id INNER JOIN tags t ON t.idt = ta.idt
 WHERE id BETWEEN $end AND $start
 GROUP BY a.id
 ORDER BY a.id desc;

然后在PHP中进行拆分瞧!

foreach($rows as $row) {
   foreach(explode(',', $row['all_tags']) as $tag) {
      echo '<a href="somepath/tags?t={$tag}">{$tag}</a>';
   }
}

这比使用某些查询而不是内部foreach更为可取。

在任何情况下,当您实际尝试在循环中执行这些查询时,您的所有内容都会中断,这可能意味着您只是对代码存在一些问题。尽管如此,即使它起作用,也会很慢。

但是你可能确实需要一些完全不同的东西,在这种情况下不要杀死我,而是杀死别人。