mysql - 在 MySQL 中使用 CSV 列作为条件显示所有值

标签 mysql csv pdo

我有一个查询,该查询应该显示特定用户访问过的页面名称。用户表有一列包含用户已访问的页面 ID 的 CSV。 页面名称位于另一个具有相应页面 ID 的表中。

这是两个表的结构

+------------+---------------------+
| User Table |                     |
+------------+---------------------+
| USERID     | PAGE                |
| john01     | 101,102,            |
| chris5     | 101,001,003,004,005 |
+------------+---------------------+

+------------+------------------+
| PAGE TABLE |                  |
+------------+------------------+
| PAGEID     | PAGENAME         |
| 101        | Account settings |
| 102        | Details          |
| 001        | Setup account    |
| 002        | Profile          |
| 003        | Reset Password   |
| 004        | Edit user        |
| 005        | Manage accounts  |
+------------+------------------+

我的问题是如何显示特定用户可访问的所有页面名称,例如:

john01

我的查询是:

select pagename as Pages
from 
Page
where 
pageid in (select page from user where userid = 'john01')

此查询仅显示 1 个页面名称,而不是表结构中所示的 2 个页面名称。

如何使用这 2 个表结构检索特定用户的所有页面?

提前致谢。

最佳答案

这不是最好的结构,但我相信您可以使用以下查询来管理它: (不过,我强烈建议规范化用户页表,以便为每个记录引用创建一个页面 ID。)

SELECT p.pagename FROM Pages p, User u WHERE u.userid = "john01" AND u.PAGE LIKE "%p.PAGEID%"

编辑: 我启动 PhpMyAdmin 来重新创建查询,但是因为我相信编写这样的查询不符合我的本性。

我建议您像这样规范化您的表结构:

CREATE TABLE IF NOT EXISTS( ID int(10) unsigned NOT NULL AUTO_INCREMENT, 姓名varchar(25) NOT NULL, PRIMARY KEY ( ID ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

CREATE TABLE IF NOT EXISTS用户( ID int(10) unsigned NOT NULL AUTO_INCREMENT, 姓名varchar(25) NOT NULL, PRIMARY KEY ( ID ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS用户页面( 用户ID int(10) unsigned NOT NULL, 页面ID int(10) unsigned NOT NULL, PRIMARY KEY (用户ID ,页面ID ) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

现在页表列出了所有可用的页。用户表仅列出用户名和用户 ID。神奇的事情发生在 userpages 表中。您在页面和用户之间进行相关引用(权利?)。

您现在可以使用以下 SQL 查询来查询页面: SELECT p.id, p.name FROM page p, user u, userpages up WHERE u.name = 'john01' and u.id = up.userid AND up.pageid = p.id

关于mysql - 在 MySQL 中使用 CSV 列作为条件显示所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29685950/

相关文章:

php - 使用mysql如何统计成功DR的数量?

Python CSV 只写入特定行

PHP : could not find driver (PDO, MySql)

PHP、PDO 构建正确的查询以显示最流行的主题

Mysql 描述查询行估计

PHP & MySQL 不向表中插入数据 (PDO)

python - 迷失在 XML 和 Python 中

python - Scrapy - 使用 JOBDIR 获取重复项

php - 我的 PDO 执行函数出错

mysql喜欢匹配字符串上的完整单词或单词开头