我正在为一个网站开发用户配置文件系统,并在思考什么是更好(可扩展)的方法.我想出了两个解决方案,我正在寻找任何输入或指向我可能错过的东西.
以下create table语句并不是可执行的,而只是用于了解所涉及的表的布局.
我最初的想法是这样的:
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320),
user_joined DATATIME,
user_last_seen DATATIME,
user_name_first VARCHAR,
user_name_last VARCHAR,
user_name_alias VARCHAR,
user_location_country VARCHAR,
user_location_region VARCHAR,
user_location_city VARCHAR
# ...
);
Run Code Online (Sandbox Code Playgroud)
显然,这根本不是很可扩展,并且添加了令人讨厌的额外属性.一个优点是我可以快速搜索匹配特定属性集的用户.我已经做了一些环顾四周,这是一种非常常见的方法(例如Wordpress).
我的第二种方法(我正在玩的那种方法)更具可扩展性,但我对性能有点担心:
CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_email VARCHAR(320)
);
CREATE TABLE user_profile(
user_id INT UNSIGNED NOT NULL,
visibility ENUM('PRIVATE', 'PUBLIC'),
name VARCHAR,
value VARCHAR
);
Run Code Online (Sandbox Code Playgroud)
使用此方法,每个用户都有一组与之关联的键值对,这使得添加其他属性变得微不足道,以及在用户登录时加载用户配置文件.但是我丢失了第一种方法中的所有类型信息(例如,DATETIME现在存储为格式化字符串),因此一些搜索变得烦人.这确实让我可以更好地控制用户想要公开显示哪些属性.
混合方法会更好地让我平衡两种方法的优缺点吗?SO使用什么方法?还有其他方法可以解决这个问题吗?
扩展:使用混合方法将来自用户表的属性插入user_profile表以控制其对其他用户的可见性或者可能被视为额外开销是否有利?
使用Url视图助手构建链接时,如果当前页面在url中包含参数,则Url视图助手生成的url也将包含参数.
例如在页面/ controller/action/param/value /中,代码如下:
<a href="<?php echo $this->url(array(
'controller' => 'index',
'action' => 'index'
)) ?>">Dashboard</a>
Run Code Online (Sandbox Code Playgroud)
将输出:
<a href="/index/index/param/value/">Dashboard</a>
Run Code Online (Sandbox Code Playgroud)
是否可以清除参数助手输出的url?
在我的MS SQL Server数据库中,我根据一列中的各种不同代码提取交易数据.
是否更有效率:
为WHERE子句中的每个代码反复连接相同的表
在整个表格上做多个案例陈述(如下所示)
在整个表上做多个case语句,但是用一个WHERE SubsidCde IN ('AA','BA','BB', etc)子句限制它
我们每秒运行这么多查询,即使我已经尝试了所有3种方法,但我没有得到明确的结果.
SELECT
SUM(CASE WHEN Subsid_Cde = 'AA' THEN Trans_Amt END),0) [AA],
SUM(CASE WHEN Subsid_Cde = 'BA' THEN Trans_Amt END),0) [BA],
SUM(CASE WHEN Subsid_Cde = 'BB' THEN Trans_Amt END),0) [BB]
FROM
Transactions
-- There are 8 more rows like this, using a different code for each line
Run Code Online (Sandbox Code Playgroud) 我有一个SQL查询,我正在运行,但我只想选择一个特定的行.例如,假设我的查询是:
Select * from Comments
Run Code Online (Sandbox Code Playgroud)
让我们说这会返回10行,我只想选择此查询返回的第8条记录.我知道我能做到:
Select Top 5 * from Comments
Run Code Online (Sandbox Code Playgroud)
要获得该查询的前5个记录,但我只想选择某个记录,我可以在此查询中添加任何内容(类似于顶部).
谢谢
插口
我有这张桌子
CREATE TABLE `codes` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`language_id` int(11) unsigned NOT NULL,
`title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`time_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)
language_id指的是记录所使用的语言.我想要做的是检索每个language_id中最近五个(ORDER BY time_posted DESC LIMIT 5)记录的列表.我可以在PHP中使用许多不同的SQL查询在循环中执行此操作,但我觉得有一种更简单的方法.
我必须得到一本关于SQL的书,哈哈.
谢谢.
我刚刚为这个幻灯片共享中的第70页所示的组织查询分层数据的"Closure表"方法做了更新/添加/删除部分:http://www.slideshare.net/billkarwin/sql-antipatterns-strike -背部
我的数据库看起来像这样:
表分类:
ID Name
1 Top value
2 Sub value1
Run Code Online (Sandbox Code Playgroud)
表类别树:
child parent level
1 1 0
2 2 0
2 1 1
Run Code Online (Sandbox Code Playgroud)
但是,我有一个问题是将完整的树从单个查询中作为多维数组返回.
这是我想要回来的:
array (
'topvalue' = array (
'Subvalue',
'Subvalue2',
'Subvalue3)
);
);
Run Code Online (Sandbox Code Playgroud)
更新: 找到此链接,但我仍然很难将其转换为数组:http: //karwin.blogspot.com/2010/03/rendering-trees-with-closure-tables.html
Update2: 我现在可以为每个类别添加深度,如果可以提供任何帮助的话.
我有一个脚本,我写回来评论,但它只是单线程.我希望它是多线程的,但只有这样用户才能回复评论,而不是用户可以回复评论的评论.所以线程只有两个深度.
目前我储存comment_id反对user_id在我的数据库.
我能想到做多线程注释的唯一方法是parent在注释表中有一个字段.但是如果我这样做,那么当我用PHP选择注释时,我将不得不做另一个SELECT命令来为每个注释选择注释子项(如果有的话).好像在数据库上做了很多工作.
一定有更好的方法.有什么想法吗?还是教程?
根据mysql文档(Docs),为了在步骤#4中更改innodb-log-file-size,我需要删除二进制日志.我对此有一些担忧和疑问.我对innodb-log-file-size的当前值是5MB.所以我假设我的二进制日志文件是每个5MB(最大).当我查看bin-log目录时,我有一堆文件名,如'mysql-bin.000001','mysql-bin.000002'等.我相信这些是二进制日志文件,但它们都是相当的比特大于5MB.有2个文件(ib_logfile0,ib_logfile1)为5 MB.所以我的问题是
提前致谢
我对MySQL很新,学得很快.我在我的系统上安装了WAMP,并且已经使用了一个月左右.我正在寻求将MySQL升级到5.7,因为我需要新的gis功能,但我找不到一个易于按照我需要做的事情.
我一直在MySQL上阅读它是如何完成的,但发现它要么令人困惑,要么不完整,不确定是哪一个.我已经阅读了最近6个小时,但仍然不知道如何完成.
我已经备份了我的数据库,我现在并不关心它们,因为它们仍然处于开发和学习状态,并且无论如何都会重建.
如何使用完整说明将5.6升级到5.7?
这里提到的动态参数与静态参数的示例是什么?
以下是有关使用数据库参数组中的参数应了解的一些重要要点:
当您更改动态参数并保存数据库参数组时,无论“立即应用”设置如何,都会立即应用更改。当您更改静态参数并保存数据库参数组时,参数更改将在您手动重启数据库实例后生效。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
mysql ×5
sql ×3
php ×2
amazon-rds ×1
comments ×1
database ×1
innodb ×1
mysql-5.7 ×1
mysqlupgrade ×1
select ×1
sql-order-by ×1
sql-server ×1
tree ×1
view-helpers ×1