gpt4 book ai didi

mysql - 我应该重新设计我的 table 还是我可以让它工作?

转载 作者:行者123 更新时间:2023-11-29 03:04:30 25 4
gpt4 key购买 nike

现在我正在努力扩展我的网站以增加新功能。我想启用来自不同来源的通知。类似于 Facebook 上的群组和人员。这是我现在的表格布局。

course_updates
id | CRN (id of course) | update_id
------------------------------------
courses
id | course_name | course_subject | course_number
-------------------------------------------------
users
id | name | facebook_name
---------------------------------------------------

user_updates
id | user_id | update_id
------------------------

updates
id | timestamp | updateObj
---------------------------

我希望能够做的是在一个查询中获取 course_update 和 user_updates 并将它们与更新连同表的正确信息一起加入。因此,对于 course_updates,我需要 course_name、course_subject 等,对于 user_updates,我需要用户名和 facebook 名称。老实说,这可能属于两个单独的查询,但我想通过更新表的时间戳来安排所有内容,而且我觉得在 php 中对所有内容进行排序效率低下。做这个的最好方式是什么?如果我要使用联合之类的东西,我将需要一种区分通知类型的方法,因为 user_updates 和 course_updates 可以在更新中存储对同一列的引用。有什么想法吗?

最佳答案

您可能根本不需要更新 表。您可以将时间戳列包含到 course_updatesuser_updates

CREATE TABLE course_updates
(
`id` int,
`CRN` int,
`timestamp` datetime -- or timestamp type
);
CREATE TABLE user_updates
(
`id` int,
`user_id` int,
`timestamp` datetime -- or timestamp type
);

现在要获取所有更新的按列排序的统一结果集,您可能会发现将每种更新类型的更新详细信息打包到一列中的分隔字符串(使用 CONCAT_WS())很方便(我们称之为details),注入(inject)一个列来区分更新类型(我们称之为obj_type)并使用UNION ALL

SELECT 'C' obj_type, u.id, u.timestamp, 
CONCAT_WS('|',
c.id,
c.course_name,
c.course_subject,
c.course_number) details
FROM course_updates u JOIN courses c
ON u.CRN = c.id
UNION ALL
SELECT 'U' obj_type, u.id, u.timestamp,
CONCAT_WS('|',
s.id,
s.name,
s.facebook_name) details
FROM user_updates u JOIN users s
ON u.user_id = u.id
ORDER BY timestamp DESC

示例输出:

| OBJ_TYPE | ID |                   TIMESTAMP |                 DETAILS |-------------------------------------------------------------------------|        C |  3 | July, 30 2013 22:00:00+0000 | 3|Course3|Subject3|1414 ||        U |  2 | July, 11 2013 14:00:00+0000 |        1|Name1|FB Name1 ||        U |  2 | July, 11 2013 14:00:00+0000 |        3|Name3|FB Name3 |...

这是 SQLFiddle 演示

然后,您可以在 php 中遍历结果集的同时轻松展开详细信息值。

关于mysql - 我应该重新设计我的 table 还是我可以让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006910/

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