胜博发游戏官网如何高效的查询需要合并大数据表的操作

( 胜博发游戏官网 )

1.存在两个数据库Shanghai和Beijing(假设其他数据丢失,中国人口数据只剩下上海和北京)
2.两个数据库中都有同样结构的表table_people,数据量都在一千万左右
3.有以下数据
Shanghai.table_people

id username birthday
1 jhon 2016-08-15 12:00:00
2 may 2016-08-14 13:00:00
3 abcd1111 2015-08-01 14:00:00
…. …..

Beijing.table_people

id username birthday
1 mike 2016-08-16 23:58:00
2 kitty 2016-08-03 15:00:06
3 ab111 2014-01-01 15:16:18
…. …..

问:
1.如何高效的(1s内)查出最近在中国出生的前十个人
2.对于YII框架数据提供器应该怎么写

(SELECT * FROM Beijing.table_people ORDER BY birthday limit 10)
union all
(SELECT * FROM shanghai.table_people ORDER BY birthday limit 10)
ORDER BY birthday limit 10

你看这种思路可以吗?

birthday类型得是datetime不能是string,然后作索引。查的时候先union all再order by再limit 10。mysql内部应该是就是对两个索引做一下归并排序

如果想更快,就把birthday类型改成int的

每个表都取符合条件的前10条数据,然后再对取出来的数据在代码里排序并取出最终的前10条数据。

不过这样写代码也很累,以后加一个表就得改代码,所以建议找一下数据库中间件的相关资料。

两个sql,根据id desc 以及limit 10,都插入到一个临时表,对20条数据时间排序再limit10

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

胜博发游戏官网navicat创建mysql数据库的表的时候可以设置int的长度,这个设置是不是无效?int的长度不是固定的吗?

( 胜博发游戏官网 )

int存储空间占4个字节,这个是固定的,那个长度只是显示位宽而已。不影响占用空间

int有两种存储方式,一种是孤定长度的,一种是不固定长度的

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

sbf胜博发娱乐城mac bash: mysql: command not found

( sbf胜博发娱乐城 )

我按照网上的一些提示把环境变量写在了.bash_profile文件中,但是mysql命令还是执行不了。

export NVM_DIR=”$HOME/.nvm” [ -s “$NVM_DIR/nvm.sh” ] && .
“$NVM_DIR/nvm.sh” # This loads nvm export
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export
PATH=”/usr/local/mysql/bin:$PATH”

代码的最后一行 少了export PATH=”/usr/local/mysql/bin:$PATH”。 其他的变量也需要加上export,否则在bash里面也是不可见的。

PS:很可能当你看到我的答案时,问题已经不存在了。
.bash_profile是在bash启动时加载的,也就是你打开terminal的时候。修改这个文件后,需要重启terminal才会生效。也可以执行source .bash_profile重新加载它。

昨天也试过source .bash_profile,但是不是这个问题,我觉得很可能是我定义了连个PATH导致这个问题的,先在是通过 alias mysql /usr/local/mysql可以解决这个问题

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城mysql leftjoin查询结果比主表多出几十条

( sbf胜博发娱乐城 )

什么原因?怎么去重复

参考资料:
http://www.xumenger.com/sql-j…

举个例子你就知道了

    A表:                          B表:
id   | name                id | email
 1   | tom                  1 | anything@126.com
 2   | mary                 1 | anything@163.com
                            1 | anything@gmail.com
SELECT a.* FROM talbe_a AS a
LEFT JOIN table_b AS b ON a.id = b.id

如上,最终结果会有多少条数据呢?

一对多的关系

谢谢邀请。是你左右表的主键外键对应的问题

你这不叫重复,你这是右表中的数据有相同的id,就是你连接的条件字段相同

left主表一般是多条记录的连接单条记录
比方说:借阅记录表:外键【读者ID】 外键【图书ID】
left显示的记录数是跟主表有关系,也就是说主表有几条,如果不加条件限制,结果跟主表条数一致

A表 left join B表

A表是主表?? 还是 B表是主表??

有没有对应关系?? a.id = b.id 限制加了没有??

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

胜博发游戏官网sql 中 group 和field 查询问题。

( 胜博发游戏官网 )

目前试着简单的文章系统,表名为forum 包括了id,uid(发布者的id),content(内容),time
(时间)等等字段,因为需要做个点赞功能,于是新建了一张点赞表
forum_likes,里面包括了id,forum_id(文章的id),uid(点赞者的id),现在想做文章的首页可以显示相应文章的点赞数目,使用了leftjoin 关联点赞表,这样一个文章对应着多个点赞,统计点赞数目的是,使用count(),但是发现field需要很多字段,比如想把content和time都显示出来,但是不能全部group。所以想咨询下一般这种情况怎么处理,个人sql水平非常渣。

在forum 表中增加一个点赞数或在sql中做一个虚拟字段记录点赞数(结果来自于主键的关联查询)

select id,content,time,num from forum left join (select count(*) as num,forum_id from forum_likes group by forum_id) as like on forum.id=like.forum_id;差不多这个一意思吧。

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

SBF胜博发娱乐老虎机如何高效的识别出异地代充的设备

( SBF胜博发娱乐老虎机 )

1.有以下订单表Order(简表,XX…代表的数字一样,money和orderID与业务无关忽略处理,表数据在千万条):

id username mac ip money orderID
1 mike 12:XX… 1.2.3.4 money orderID
2 leo EC:XX… 120.145.2.1 money orderID
3 mike EC:XX… 120.145.2.1 money orderID
4 mike EC:XX… 120.145.2.5 money orderID
5 kitty EC:XX… 120.145.2.3 money orderID
6 leo 34:XX… 2.3.4.5 money orderID
7 leo DD:XX… 110.120.122.119 money orderID
8 jhon 56:XX.. 5.6.7.8 money orderID
9 jhon 56:XX.. 5.6.7.8 money orderID
10 ben DD:XX.. 110.120.122.119 money orderID
11 ben 78:XX.. 7.8.9.10 money orderID

2.异地代充设备的定义:在同一设备(MAC)登录两个用户以上,并且这些用户中至少有两个用户在别处登录

3.上表中有两个异地代充设备,分别为EC:XX和DD:XX,其中mike,leo,kitty找了代充机构EC:XX,其中leo同时找了代充机构DD:XX, ben也找了代充机构DD:XX

4.如何找出类似EC:XX和DD:XX的设备?

谢谢邀请。用find_in_set函数试试看

SELECT id FROM table WHERE find_in_set('EC:XX', mac) OR find_in_set('DD:XX', mac);

SELECT mac FROM (
SELECT DISTINCT mac, username FROM ORDER
) AS tmp
GROUP BY mac
having count(1) > 1

不知道有没有写错,没有测试,但估计性能不会很好,毕竟涉及到disintctgroup by操作。

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

胜博发游戏官网mysql 存储过程 和 函数有什么用??

( 胜博发游戏官网 )

mysql 存储过程 和 函数有什么用??

链接描述

请看我这个问题,就要用存储过程

一次连接数据可以实现很复杂的数据库操作

(看完/读完)这篇文章有何感想! 胜博发游戏官网的分享…

sbf胜博发娱乐城mysql case when 查询一个效率问题

( sbf胜博发娱乐城 )

第一种:

SELECT
    `user`.username,
    `user`.email,
    `user`.id AS user_id,
    user_class.level_id,
    user_class.class_id AS cid,
    user_class.create_time AS bontime,
    class.graduation_time,
    class.offline_graduation_time,
    class.is_baidan,
    class. NAME AS class,
    class.period_id,
    class.offline_period_id,
    company. NAME AS branch,
    company.id AS bid
FROM
    `user_class`
INNER JOIN `user` ON user_class.user_id = `user`.id
INNER JOIN class ON user_class.class_id = class.id
LEFT JOIN company ON class.company_id = company.id
LEFT JOIN period ON class.period_id = period.id
WHERE
    class. DISABLE = 1
AND class.is_baidan IN ('1', '2')
AND `user_class`.level_id IN ('10', '12', '14')
AND CASE
WHEN is_baidan = 1 THEN
    class.graduation_time=0 
    OR class.graduation_time > 1469980800
WHEN is_baidan = 2 THEN
    class.offline_graduation_time = 0
    OR class.offline_graduation_time > 1469980800
END;

第二种:

SELECT
    `user`.username,
    `user`.email,
    `user`.id AS user_id,
    user_class.level_id,
    user_class.class_id AS cid,
    user_class.create_time AS bontime,
    class.graduation_time AS eontime,
    class.offline_graduation_time,
    class.is_baidan,
    class. NAME AS class,
    class.period_id,
    class.offline_period_id,
    company. NAME AS branch,
    company.id AS bid
FROM
    `user_class`
INNER JOIN `user` ON user_class.user_id = `user`.id
INNER JOIN class ON user_class.class_id = class.id
LEFT JOIN company ON class.company_id = company.id
LEFT JOIN period ON class.period_id = period.id
WHERE
    class. DISABLE = 1
AND `user_class`.level_id IN ('10', '12', '14')
AND (
    (
        class.is_baidan = 1 AND 
        (class.graduation_time = 0 OR class.graduation_time > 1469980800)
    )
    OR (
        class.is_baidan = 2 AND 
        (class.offline_graduation_time=0 OR class.offline_graduation_time >1469980800)
    )
);

这两个sql语句查询结果相同,想问问到底是哪个好一点

看mysql的执行计划,你这个sql语句不执行执行计划看,我觉得谁也告知不了你准确的答案,因为他们没有非常明显的性能差异。

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

SBF胜博发娱乐老虎机应该怎么存储电影院的座位分布?

( SBF胜博发娱乐老虎机 )

如下图中的影院座位分布,应该怎么在服务器中存储不同影院的座位分布呢?

要啥二维数组,每个电影院都有自己的座位编号,存编号就 okay

但问题来了,每个电影院前端页面可能不一样啊,给商家一个坐席生成器,生成个序列,让前端显示只和座位编号关联,前端的座位编号序列单独保存一份,就妥了。

就算同一个电影院,不同厅座位可能完全不同,只有分离能解决。

只考虑分布不考虑座位状态的话,直接二维数组存就好了

并不是二维,就把座位按顺序编号,而且电影院肯定也是每个座位都有唯一编号。
数据库字段就一个编号就行了 编号:3-14 如果行列值读取频繁,那你可以增加两个冗余字段列 行:3 列:14 一共存三个字段, json的话不实用。

二维数组,没有座位的位置置为负值。

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

sbf胜博发娱乐城python问题,将从第三方接口获取的unicode存储到MySQL中,怎么处理的?

( sbf胜博发娱乐城 )

我是这么想的:

1 将unicode不作处理直接存到数据库:
这种方法我在INSERT数据的时候不会有warning,以后取数据的时候直接取出的是unicode处理也比较容易。
insert into table_1(name) VALUES("u'\u4e2d'");

2 转化成str存储到数据库:
u'中',encode成字符串,"\xe4\xb8\xad" ,这种方法在INSERT数据的时候会有warning,而且"\"会被去除,存储成"xe4xb8xad",而且会有warning。

不知道哪种方式更好,没有什么经验,求指导一下。

建连接的时候记得加use_unicode=True, charset="utf8"
insert的时候用参数传递cursor.execute("INSERT INTO table_1(name) VALUES(%s)", (u'\u4e2d', ))

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城将SQLServer数据同步到MySQL 用什么方法?

( sbf胜博发娱乐城 )

目的:将 SQLServer 数据表里的数据自动同步到 MySQL 的数据表里。
环境:两个数据库分别在两台服务器上;SQLServer表名为 tb1, MySQL表名为 tb2
同步方法:
1、实时同步:在 SQLServer 建立 ODBC 数据源,将 MySQL 数据库设置为系统DSN,然后建立链接服务器 mysql。在 tb1 表上建立插入、修改、删除触发器,自动更新MySQL表。
2、定时作业:还没用过,不会,谁能给个例子?谢谢。

问题:
1、方法1需要两台服务器都工作正常,MySQL不能关机或重启,否则会同步不成功。而且测试往 SQLServer 的tb1表中插入数据时,还报错:

链接服务器"mysql"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[MySQL][ODBC 5.2(w) Driver]Optional feature not supported"。

2、方法2定时作业,同步时同步 tb1 表中的全部数据还是只同步当天的数据?怎样区分?按时间吗?具体怎样同步到链接服务器 mysql 的 tb2 表中?

这两种同步方法哪种稳定?同时也好检查同步失败的数据?或者还有其它什么方法吗?(不用第三方软件)

希望有类似经验的大神们给个方案,十分感谢!

定时同步压力小点。如果你有两个字段created_atupdated_atcreated_at代表记录啥时候创建的,updated_at代表记录啥时候更新的。每次同步就就按照这两个字段把当前这个时段的记录select出来然后存储就OK了。

为啥不试试kettle,是一款ETL工具,用于数据抽取,支持各种数据库,而且也可以定时job,也可以中断续传,完全满足你的需求,之前公司用过,很好,很强大,可以试试。http://www.oschina.net/p/kettle 网上也有不少资料

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城pdo_mysql 值自增写法

( sbf胜博发娱乐城 )

以前用mysql_query的时候,为了实现数据库计数,是使用

mysql_query("update table set field=field+1 where ....");

这种方式,现在整体换成pdo_mysql的话,

("update table set field=? where ....")

然后?处bind field+1肯定是不行了…

怎么写自增效率较高呢?请教下各位,感谢

啊,不是有query方法吗?

$pdo = new \PDO($dsn, $user, $password);
$pdo->query("update table set field=field+1 where ....");

这个地方不用参数替换不就行了…… 直接写 field=field+1

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城ubuntu安装mysqlworkbench依赖关系不满足。

( sbf胜博发娱乐城 )

我重新安装libatkmm也不行,请问怎么解决?

有没有可能是版本问题,参考 https://bugs.mysql.com/bug.ph…

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

sbf胜博发娱乐城mysql 实现不同的时间间隔 显示不同的时间单位。

( sbf胜博发娱乐城 )

类似于这样的。

1分钟内以秒为单位
1小时内以分钟为单位
1天(24小时)内以小时为单位
1月内以天为单位….

以此类推。

sql 该如何编写??

嗯…为什么不在前端处理?sql只用对时间排序取出来就行了啊!

如果说是使用php的话
应该可以使用PHP实现
可以看看DateTime对象的diff方法
对你应该有帮助

建议在拿到数据后后台语言处理一下再交给前台,或者前台这一个格式规则用来转换。处理起来都很快

推荐你一个类库:https://github.com/briannesbi…

use Carbon\Carbon;

Carbon::setLocale('zh');  // 设置语言
        
$now = Carbon::now();  // 当前时间

echo Carbon::parse('2016-09-11 11:11:11')->diffForHumans($now);

// 输出:3天前

直接从数据库中取出记录插时的时间字段,然后通过后台来处理,大概处理的思路是这样:
‘时间间隔’=’当前时间’-‘数据库中的时间’
判断’时间间隔’如果小于一分钟,以秒为单位返回,小于一小时,以分为单位返回,以此类推。返回简单点的直接返回一个字符串,例如:
如果 ‘时间间隔’ 小于一分钟

返回 '秒数'+"秒"

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

SBF胜博发娱乐老虎机这个SQL哪不对

( SBF胜博发娱乐老虎机 )

1.统计任务提交情况
2.A(id,name)人员表,B(bid,aid, mission)任务提交记录表,aid 对应id,mission为字符串字段,一个人可提交多次任务,示例数据
id name
1 张三
2 李四
3 王五

bid aid mission
1 1 xxxxx
2 1 yyyyy
3 2 zzzz

sql: select A.name,if(mission<>null,1,0) as mnum from A leftjion B on B.aid= A.id orderby id
得到是
name mnum
张三 0
张三 0
李四 0
王五 0

这个if怎么不起作用的????

本来最终想得到如下效果,那么SQL怎么写
name 任务次数
张三 2
李四 1
王五 0

这句亲测成功

select A.name,sum(if(mission is not null,1,0)) as '任务次数' from A leftjion B on B.aid= A.id  group by A.id order by A.id desc

SELECT NULL IS NULL, NULL IS NOT NULL, NULL = NULL, NULL <> NULL
你分别跑下 你就知道为什么你的if不起作用了。

按照SQL规范,所有和NULL运算的结果都是NULL,所以对NULL的判断需要使用特殊的方法

1、IFNULL函数
2、mission<>null 改为 mession is not null

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

sbf胜博发娱乐城mysql垂直拆分数据表

( sbf胜博发娱乐城 )

在开发过程中,我遇见这么一个问题:在数据库中有一张文章表,用以保存文章的相关信息(如:标题、内容、作者、创作时间、收藏数等),还有另外一张表用以保存用户和文章的收藏关系(主要字段有:用户ID、文章ID),在有初次查看该文章时从数据库获取到文章数据后会将数据缓存到redis中,由此提高性能。
但现在因为每次收藏或取消收藏文章时都会更新文章表的收藏数这一字段,并且都会清空该文章的缓存(之所以选择清空而不是更新缓存,是为了避免产生脏数据),下次访问该文章时又会查询数据库并缓存数据,因此会对性能造成一定影响!

因此我决定将文章表的收藏数拆分出来新建一张文章收藏数表(主要字段有:主键id,文章ID,收藏数),并且缓存文章数据时将收藏数分开缓存,这样,每次收藏或取消收藏文章时文章表不用更新,只更新文章收藏数表,更新文章收藏数表后,直接更新缓存(这儿之所以不怕产生脏数据是因为收藏数不是特别重要的数据,就算有一定误差也不会造成恶劣影响)。

使用以上方案,由此产生两个疑问,希望得到大家的解答:

  1. 因为文章收藏数中主键ID和文章ID两个字段都是唯一不重复的字段,是否可以不要主键ID字段,直接将文章ID当做主键?

  2. 因为如果每次新增一条文章数据时没有同步新增一条对应文章ID的文章收藏数数据,那么每次收藏与取消收藏文章时更新文章收藏数,都会需要先查询文章收藏数表中是否已经存在对应文章ID的收藏数,如果没有就新增一条文章收藏数数据,如果有就直接更新该文章的收藏数,所以,为了简便,我决定每次新增一条文章数据时都同步新增一条对应文章ID的文章收藏数数据,以后更新文章收藏数时就不需要先判断数据是否存在,而可以直接更新数据,在这种情况下,要怎么避免新增文章数据和新增文章收藏数数据之间出现异常导致新增文章数据成功而新增文章收藏数数据失败的情况?我知道可以使用事务来避免,可以有没有更简单的方法呢?MySQL可不可以新增一条数据的同时自动在另一张表里新增一条数据?(数据库渣~)

以上,致谢!

1.可以,但这里你需要做一个联动就是在增删文章的时候也要对文章收藏数表进行操作

2使用mysql的udf,详情请看MySQL :: MySQL 5.1 Reference Manual :: 22.3 Adding New Functions to MySQL 然后通过trigger在文章表deleteinsert之后进行函数的调用,写入到文章收藏数表中去。大致是这个样子。

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…

SBF胜博发娱乐老虎机Windows服务中MySQL无法启动

( SBF胜博发娱乐老虎机 )


错误3:系统找不到指定的路径。

C:\WINDOWS\system32>mysql
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

在服务里面,查看下mysql的属性,看里面的具体路径是不是对的。

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

SBF胜博发娱乐老虎机mysql起不来了,为什么?

( SBF胜博发娱乐老虎机 )

说找不到pid文件,网上说要把进程杀死先。但是我进程都没有啊。

请大神帮帮我,非常感谢!!!

查看错误日志

你看看有没有这个文件localhost.localdomain.err文件,一般mysql开启报错都会在这里面的

有可能是数据库目录权限问题

(看完/读完)这篇文章有何感想! SBF胜博发娱乐老虎机的分享…

sbf胜博发娱乐城求教一个sql,取出所有半年内的每个月的第一条符合条件的记录

( sbf胜博发娱乐城 )

如题呢。有一张表记录了一些数据和数据的时间戳

select * from tbl;

       tstamp        | data
---------------------+------
 2016-02-03 00:00:00 |  200
 2016-02-04 00:00:00 |  300
 2015-07-06 00:00:00 |  202
 2016-09-01 00:00:00 |  300
 2015-07-06 00:00:00 |  324
 2015-07-15 00:00:00 |  299
(6 行记录)

先把数据按月份划分窗口,再把每个月份窗口内部排序,最后选出序号为1的记录。

select tstamp, data from
  (select tstamp, data, row_number() over
    (partition by date_trunc('month', tstamp) order by tstamp) as row
  from tbl) as tbl_windows
where row = 1;

       tstamp        | data
---------------------+------
 2015-07-06 00:00:00 |  202
 2016-02-03 00:00:00 |  200
 2016-09-01 00:00:00 |  300
(3 行记录)

如果表有自增的id列,还可以用更简单的

select tstamp, data from tbl where id in
  (select min(id) from tbl group by date_trunc('month', tstamp));

沒有 mysql 環境, 在 sqlserver 給試了下

create table td(
tstamp datetime,
data int
);
    
insert into td (tstamp, data) values
('2016-02-03 00:00:00', 200),
('2016-02-04 00:00:00', 300),
('2015-07-06 00:00:00', 202),
('2016-09-01 00:00:00', 300),
('2015-07-06 00:00:00', 324),
('2015-07-15 00:00:00', 299),
('2016-03-05 00:00:00', 499);

select * from td as t1
right join (
select
 convert(varchar(7), tstamp, 126) as ts1,
 min(tstamp) as ts2 from td
 where tstamp between '2016-01-01' and '2016-07-01'
 group by convert(varchar(7), tstamp, 126)
) as t2 on t1.tstamp=t2.ts2
tstamp                   data         ts1      ts2                      
------------------------------------------------------------------------
2016-02-03 00:00:00.0    200          2016-02  2016-02-03 00:00:00.0    
2016-03-05 00:00:00.0    499          2016-03  2016-03-05 00:00:00.0    

下面是翻譯成 mysql 的語句(未測試)

select * from td as t1
right join (
 select
  date_format(tstamp, '%y-%m') as ts1,
  min(tstamp) as ts2 from td
  where tstamp between '2016-01-01' and '2016-07-01'
  group by date_format(tstamp, '%y-%m')
) as t2 on t1.tstamp=t2.ts2

具體根據自己字段調整

select record from dataset where time.month in ("Jan","Feb",..."Nov") limit 1

大概是这样的感觉,然而我并不知道怎么从时间中提取出月份,自行解决吧。


select `data` as data,MONTH(FROM_UNIXTIME(`dateline`)) AS M from table where dateline<半年 group by M ;

用时间函数转换 可以的

(看完/读完)这篇文章有何感想! sbf胜博发娱乐城的分享…