小编Bil*_*win的帖子

选择存储用户配置文件的方法?

我正在为一个网站开发用户配置文件系统,并在思考什么是更好(可扩展)的方法.我想出了两个解决方案,我正在寻找任何输入或指向我可能错过的东西.

以下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表以控制其对其他用户的可见性或者可能被视为额外开销是否有利?

database database-design entity-attribute-value

7
推荐指数
1
解决办法
2803
查看次数

使用Url视图助手链接时从URL中删除参数

使用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?

zend-framework view-helpers

7
推荐指数
1
解决办法
1万
查看次数

SQL CASE vs JOIN效率

在我的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-server

7
推荐指数
1
解决办法
6329
查看次数

在SQL查询中选择第N个记录

我有一个SQL查询,我正在运行,但我只想选择一个特定的行.例如,假设我的查询是:

Select * from Comments
Run Code Online (Sandbox Code Playgroud)

让我们说这会返回10行,我只想选择此查询返回的第8条记录.我知道我能做到:

Select Top 5 * from Comments
Run Code Online (Sandbox Code Playgroud)

要获得该查询的前5个记录,但我只想选择某个记录,我可以在此查询中添加任何内容(类似于顶部).

谢谢

插口

sql sql-server-2005

7
推荐指数
1
解决办法
4万
查看次数

SQL查询,在每个组中选择最近的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的书,哈哈.

谢谢.

mysql sql select sql-order-by greatest-n-per-group

7
推荐指数
1
解决办法
4441
查看次数

将数据库结果转换为数组

我刚刚为这个幻灯片共享中的第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: 我现在可以为每个类别添加深度,如果可以提供任何帮助的话.

php mysql tree hierarchical-data

7
推荐指数
2
解决办法
5601
查看次数

多线程评论PHP?

我有一个脚本,我写回来评论,但它只是单线程.我希望它是多线程的,但只有这样用户才能回复评论,而不是用户可以回复评论的评论.所以线程只有两个深度.

目前我储存comment_id反对user_id在我的数据库.

我能想到做多线程注释的唯一方法是parent在注释表中有一个字段.但是如果我这样做,那么当我用PHP选择注释时,我将不得不做另一个SELECT命令来为每个注释选择注释子项(如果有的话).好像在数据库上做了很多工作.

一定有更好的方法.有什么想法吗?还是教程?

php mysql sql comments hierarchical-data

7
推荐指数
1
解决办法
4704
查看次数

MySQL如何更改innodb-log-file-size

根据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.所以我的问题是

  1. 哪些文件是我的'二进制日志'?
  2. 我需要删除哪些内容?

提前致谢

mysql innodb

7
推荐指数
1
解决办法
9492
查看次数

将MySQL 5.6升级到5.7

我对MySQL很新,学得很快.我在我的系统上安装了WAMP,并且已经使用了一个月左右.我正在寻求将MySQL升级到5.7,因为我需要新的gis功能,但我找不到一个易于按照我需要做的事情.

我一直在MySQL上阅读它是如何完成的,但发现它要么令人困惑,要么不完整,不确定是哪一个.我已经阅读了最近6个小时,但仍然不知道如何完成.

我已经备份了我的数据库,我现在并不关心它们,因为它们仍然处于开发和学习状态,并且无论如何都会重建.

如何使用完整说明将5.6升级到5.7?

mysql mysql-5.7 mysqlupgrade

7
推荐指数
1
解决办法
8168
查看次数

RDS 参数组 - 动态和静态

这里提到的动态参数与静态参数的示例是什么?

以下是有关使用数据库参数组中的参数应了解的一些重要要点:

当您更改动态参数并保存数据库参数组时,无论“立即应用”设置如何,都会立即应用更改。当您更改静态参数并保存数据库参数组时,参数更改将在您手动重启数据库实例后生效。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

amazon-rds

7
推荐指数
1
解决办法
6124
查看次数