gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:32:34 26 4
gpt4 key购买 nike

我有一个查询,该查询应该显示特定用户访问过的页面名称。用户表有一列包含用户已访问的页面 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com