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胜博发娱乐老虎机的分享…

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

( 胜博发游戏官网 )

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 innodb 前面的“~”符号表示的含义

( sbf胜博发娱乐城 )

同样的数据库表设计,都是MySQL,两台不同的服务器,但是 phpmyadmin 里面显示表记录数行数前面,A有~,B没有~

A 系统的配置:

数据库服务器

    服务器: mysql wampserver (127.0.0.1 via TCP/IP)
    服务器类型: MySQL
    服务器版本: 5.6.17-log - MySQL Community Server (GPL)
    协议版本: 10
    用户: root@localhost
    服务器字符集: UTF-8 Unicode (utf8)

网站服务器

    Apache/2.4.9 (Win64) OpenSSL/1.0.1g PHP/5.5.12
    数据库客户端版本: libmysql - mysqlnd 5.0.11-dev - 20120503 -
    $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $
    PHP 扩展: mysqli 文档

phpMyAdmin

    版本信息: 4.1.14,最新稳定版本: 4.6.4

A显示截图:

B 系统的配置:

数据库服务器

    服务器: Localhost via UNIX socket
    服务器类型: MariaDB
    服务器版本: 5.5.41-MariaDB-log - MariaDB Server
    协议版本: 10
    用户: root@localhost
    服务器字符集: UTF-8 Unicode (utf8)

网站服务器

    nginx/1.6.3
    数据库客户端版本: libmysql - 5.5.41-MariaDB
    PHP 扩展: mysqli 文档
    PHP version: 5.4.16

phpMyAdmin

    版本信息: 4.4.10,最新稳定版本: 4.6.4

B显示截图:

这里~应该是”大约”的意思,就是大约这个表有多少行记录.

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

SBF胜博发娱乐老虎机抽象类和接口?

( SBF胜博发娱乐老虎机 )

请问在什么情况下,将对象抽象为一个抽象类?在什么情况下,该将对象抽象为一个接口?我知道他们两个的区别,就是想知道在什么场景下该抽象为哪种?

比如说生物和人 此时生物可以当做接口,人当做实现生物的抽象类,男人女人作为具体实现类,为什么可以这样设计?因为生物是个非常非常抽象的概念,你很难抽象出它的具体行为(也就是具体的方法实现),此时可以当做接口,人为何可以作为抽象类,因为他可以有具体的行为动作实现,比如,摸爬滚走,但是可能男人女人的性征不一样,同时可能还有一些公有的行为 但是行为特征不一样 这可以当做抽象类的抽象方法,让子类实现。大概是这样。

比如你有好多个类似的对象(想了半天,用别的词不太合适),人也好,东西也好。他们的属性几乎都一样,你就可以把它们抽象成一个类。比如车类,有轮子、发动机、底盘、外壳等属性。new一个对象,来保存当前的属性,可能你要把这些属性保存到数据库,也可能要显示给用户,当前的对象就是起了个保存数据的作用。对象不仅仅能保存数据,还可以有自己的方法,比如发动车。点击某个按钮,调用当前对象的发动的方法。一般类的方法都会和数据的变化有关,我说的是一般,并不是所有。比如数据库连接类,就不会改变数据,只是起到一个连接数据库的作用。
接口一般来说是给外部调用的。你写了一系列的方法,最终能完成一个有用的动作。这一系列的方法最开始的地方就是接口,你可以这么理解。比如一个简单登陆界面,你输入用户名密码之后,点击确定就开始调用后台登录接口,把用户名密码传给服务器,服务器端接收需要一个方法,接收之后要对密码进行验证,又是一个方法。验证之后给客户端返回消息。登录成功或者失败,这一系列动作完成。当然这些你可以压到一个方法里完成,总之开始的地方就是接口。
以上说法比较直白,并不完全准确。

接口表示一个能力/行为。例如:人会跑,狗也会跑,就可以定义接口IRunable。 使用接口很好实现组件间解耦。
抽象类就是为了实现多态,使代码更方便扩展。

接口就好像是100% 纯天然的抽象类。

接口的话更偏向于为一群类定一个协议, 而抽象类的话已经向实现迈进了一步。

例如模板方法模式中就用到了抽象类,实现了一些通用的方法, 而将不同的方法延迟到子类再实现。

举个简单的例子,你现在想要抽象所有国家的人,那么你会想到抽象成一个接口,然后有个方法叫sayHello

public interface Human{
    
    String sayHello();
}

OK,现在每个实现了这个接口的对象只要实现sayHello方法,就表示了各个国家的人,他们拥有了不同的打招呼的的方式。

但是现在业务复杂起来了,你需要这些人还具备一些通用的能力,比如cry,walk,那么这个时候,你是不是应该考虑把Human抽象成为一个抽象类,像这样:

public abstract class Human{
    
    public abstract String sayHello();
    
    public String cry(){
        System.out.println("wu~wu~wu~wu~wu~");
    }
    
    public String walk(){
        System.out.println("左右左 左右左");
    }
}

总结一下,就是如果只有抽象的方法,那么就用接口,如果还有通用的具体方法实现,则用抽象类

参考:
The Java™ Tutorials :: Learngin The Java Language :: Interfaces and Inheritances :: Inheritances :: Abstract Methods and Classes :: Abstract Classes Compared to Interfaces

抽象类用于抽象事物,接口抽象行为

该类定义统一操作,为对象提供方法

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

SBF胜博发娱乐老虎机PHP,各位大牛怎么从数据里的手机号字段统计出来三大运营商的手机号数量

( SBF胜博发娱乐老虎机 )

PHP,各位大牛怎么从数据里的手机号字段统计出来三大运营商的手机号数量

结合上面两位的回答就是你要的

使用正则表达式

首先你要知道三大运营商的号段,再进行分类,最后统计

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

SBF胜博发娱乐老虎机MySQL,如何用一条sql来update两张表?

( SBF胜博发娱乐老虎机 )

表A,字段1
表B,字段1
如何一条sql更新两张表?
设置字段1=100,字段2=200
update 表A,表B,set 表A.字段1……这样吗?

UPDATE table1 AS a, table2 AS b, table3 AS c, ...
SET a.name = 'W', b.name = 'T', c.name = 'F', ...
WHERE a.id = 1 AND b.id = 2 AND c.id = 3

然而并不建议在一个sql里对两张无关联需求的表进行update操作。

建议开启一个事务完成两个表的更新操作。
start transaction;
update table A;
update table B;
commit;

为什么不尝试一下呢?

这么神奇的想法

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