php - 如何在 PHP 和 MySQL 中建立一个多类别的管理员?

标签 php mysql join

我想为我的网站构建一个管理页面,我可以在其中使用多个复选框来存储/更新单个帖子的许多类别。 所以我创建了三个表:

POST Table (id (index, auto-increment, not null), subject, content)

CATEGORIES Table (id (index, auto-increment, not null), name)

POST_CATEGORIES Table (id (index, auto-increment, not null), id_cat (foreign key to CATEGORIES.id), id_post (foreign key to POST.id))

(最后一个表正在建立帖子及其类别之间的关系。)

所以我尝试列出带有多个复选框的类别。我正在执行此查询,但它没有按预期工作:

$select = $db->query('SELECT categories.id, categories.name, post_categories.id_cat AS fk_cat, post_categories.id_post AS fk_post, post.id AS post_id
  FROM `categories` 
    LEFT JOIN post_categories
       ON categories.id = id_cat
     LEFT JOIN posts
       ON post.id = id_post');

结果是我有一个类别列表,但每个类别名称都会重复,具体取决于具有该类别的帖子数量(例如:如果帖子 1 和帖子 2 都有类别 1,则类别 1 将在我的列表中出现 2 次)。

编辑: 感谢您的回复,这是一个 sqlfiddle 来看看发生了什么...... http://sqlfiddle.com/#!9/4c304/1

(我正在尝试显示类别列表。我不会从类别表中选择 *,因为在下一步中,我希望在编辑帖子时检查正确的类别。)

最佳答案

SELECT DISTINCT c.id
              , c.name
              , p.id post_id
           FROM categories c
           LEFT 
           JOIN post_categories pc
             ON c.id = pc.id_cat
           LEFT 
           JOIN posts p
             ON p.id = pc.id_post

关于php - 如何在 PHP 和 MySQL 中建立一个多类别的管理员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430982/

相关文章:

php - mysql 三个表的内连接和外连接

php - Laravel 会在每次调用时重新加载类吗?

php - Cakephp 3 的复杂 JSON

php - MySQL 迭代分割字符串的元素并用它们做事

java - 从java代码如何访问安装在远程ubuntu机器上的mysql进行selenium测试?

mysql - 左加入 MAX(DATE)

mysql - 从值的子集中选择多个最小值

javascript - 如何为网站添加唯一访问计数器?

php - 为什么 mcrypt_encrypt() 将二进制字符放在字符串的末尾?

mysql - Sesame 配置了 MySql 支持