GVKun编程网logo

JS - 如何正确返回 mysql 查询值(mysql返回json)

12

如果您想了解JS-如何正确返回mysql查询值和mysql返回json的知识,那么本篇文章将是您的不二之选。我们将深入剖析JS-如何正确返回mysql查询值的各个方面,并为您解答mysql返回json

如果您想了解JS - 如何正确返回 mysql 查询值mysql返回json的知识,那么本篇文章将是您的不二之选。我们将深入剖析JS - 如何正确返回 mysql 查询值的各个方面,并为您解答mysql返回json的疑在这篇文章中,我们将为您介绍JS - 如何正确返回 mysql 查询值的相关知识,同时也会详细的解释mysql返回json的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

JS - 如何正确返回 mysql 查询值(mysql返回json)

JS - 如何正确返回 mysql 查询值(mysql返回json)

您正在使用基于回调的方法,这完全没问题。您也可以使用承诺。使用回调方法,您可以返回错误和查询结果。第一个参数可以是错误,第二个参数可以是返回值

export function getPlayerPermission(socialid,callback) {
  connection.query('SELECT permission FROM permissions WHERE socialid=?',socialid,function(err,rows){
        if(err){
            console.log(err);
            callback(err);
            return;
        }
        callback(null,rows[0].permission);
    });
}

现在在您的另一个文件中,您可以按如下方式调用该函数

chat.registerCmd('getid',(player,arg) => { 
    db.getPlayerPermission(player.socialId,function(dbErr,permission) {
        // since JS is asynchronous,you need to be in callback function to execute the rest of the code after you get the data from first query
        if (dbErr) {
           console.log(dbErr);
           return;
        }
        // Now permission variable has data returned from the query
        PermissionValue = permission;
        var vname;
        var name;

        if(arg.length <= 1) {
           chat.send(player,'/getid [Vorname] [Name]');
           return;
        }
        vname = arg[0];
        name = arg[1];

        db.getCharIdByName(vname,name,function(charid){
            chat.send(player,'Die ID des Spielers ist: ' + charid);
        });
     });
 });

Angular 4如何正确返回void observable

Angular 4如何正确返回void observable

在我的Angular 4应用程序中,我有一个必须返回一个observable的方法,
这个方法有3个条件,第一个和第二个条件进行get调用,但是第三个条件不能做任何事情,在这种情况下我也必须返回一个observable,因为这个方法是.flatmap运算符的第一部分,所以要链接flatmap的第二部分我需要从第一部分开始观察.

我尝试:返回新的Observable< void>();但我有这个错误:

ERROR TypeError: Cannot read property ‘subscribe’ of undefined

这是必须调用服务来加载数据的初始方法.

loadModelData() {
      this.customerService.getModelDetail(this.code)
        .subscribe(response => {
          this.selected = response.body as Customer;
        });
    }
  }

这是必须链接2个调用的服务方法.

getModelDetail(code) {

    const params = new HttpParams().set('projection','withBalance');

    return this.endPointUrlService.loadMaps(this.entityLink)

      .flatMap((res) => {
        return this.http.get(this.endPointUrlService.cutLinks(
          this.endPointUrlService.map.get('customers')) + '/' + code,{observe: 'response',params: params})
          .map((response) => <any>response);
      })
  }

这是来自名为endPointUrlService的支持服务的方法,checkIfMapIsReady()是必须在第三种情况下返回void observable的方法

loadMaps(entityLink: EntityLink[]): Observable<void> {
    console.log(entityLink);

    for (const i in entityLink) {
      if (entityLink.hasOwnProperty(i)) {
      return this.checkIfMapIsReady(entityLink[i].name,entityLink[i].searchMap,entityLink[i].endPoints[0])
      }
    }
  }


  public checkIfMapIsReady(modelName: string,mapName: string,endPoints: string) {

    if (this.map.get(modelName) === undefined) {
      console.log('endpoint url service All maps undefined ' + modelName);
      return this.getLinks(modelName,this.mapNames.get(mapName),false)
    } else {
      console.log('endpoint url service Populate only ' + mapName);
      if (this.mapNames.get(mapName).get(endPoints) === undefined) {
      return  this.getLinks(modelName,true)
      } else {
        return new Observable<void>();
      }
    }
  }
也许Obse​​rvable.empty()是一个更好的选项,因为它不会发出任何值,下游运算符不会有它返回的问题!

注意,下游flatMap(res => …)和subscribe()不会触发.
既然你没有使用res,我认为这是理想的效果?

为了更好地衡量,请返回类型Observable< any>.

我认为下面在逻辑上等同于发布的checkIfMapIsReady(),

public checkIfMapIsReady(modelName: string,endPoints: string) {

  const map = this.map.get(modelName);
  const name = this.mapNames.get(mapName);
  const endPointCheck = name ? name.get(endPoints) : null;

  const links = !endPointCheck 
    ? this.getLinks(modelName,name,!!map)     // !! gives boolean true or false
    : Observable.empty();

  const msg = !map 
    ? 'endpoint url service All maps undefined ' + modelName
    : 'endpoint url service Populate only ' + mapName
  console.log(msg);    

  return links;
);

linux 环境下如何正确设置 MYSQL 目录权限

linux 环境下如何正确设置 MYSQL 目录权限

设置目录权限的原则是软件和数据分开,具体如下:
1. 将 mysql 安装在单独的用户下
2. 安装时,以 root 用户进行安装,mysql 的软件默认都为 root 权限
3. 安装完毕后,将数据目录权限设置为实际运行 mysql 的用户权限,比如:
Chown –R mysql:mysql /home/mysql/data

linux中如何正确的修改MySQL密码

linux中如何正确的修改MySQL密码

本文章是在介绍在linux系统中出现忘记了mysql密码的解决办法,有碰到此类问题的朋友可来看看找回密码的方法。

如果你是没有忘记密码修改mysql密码的方法有多,如下面的

UPDATE user 语句(回目录)

这种方式必须是先用root帐户登入mysql,然后执行:

1.如果您没有忘记密码的情况下,可以通过UPDATE直接编辑user表来修改密码:进入

 代码如下 复制代码

mysql -u rootmysql> use mysql;
mysql> UPDATE user SET Pass = PASSWORD(''newpass'') WHERE user = ''root'';
mysql> FLUSH PRIVILEGES;

忘记了密码

在使用skip-grant-tables参数的同时,还要加上skip-networking参数:

 代码如下 复制代码

shell> mysqld_safe --skip-grant-tables --skip-networking &

接着使用SQL重置密码后,记得去掉skip-networking,以正常方式重启MySQL服务:

 代码如下 复制代码

 shell> /etc/init.d/mysqld restart

上面的方法需要重启两次服务,实际上还能更优雅一点,重启一次即可:

首先需要把用到的SQL语句保存到一个文本文件里(/path/to/init/file):

 代码如下 复制代码

UPDATE `mysql`.`user` SET `Password`=PASSWORD(''yourpassword'') WHERE `User`=''root'' AND `Host`= ''127.0.0.1''; FLUSH PRIVILEGES;

接着使用init-file参数启动MySQL服务,

 代码如下 复制代码

shell> /etc/init.d/mysql stop shell> mysqld_safe --init-file=/path/to/init/file &

此时,密码就已经重置了,最后别忘了删除文件内容,免得泄露密码。


如果上面办法你无法找回密码可参考下面办法

如果您已经忘记密码:

 代码如下 复制代码

# /etc/init.d/mysql stop 1、结束当前正在运行的mysql进程。
# /usr/bin/mysqld_safe --skip-grant-tables 2、用mysql安全模式运行并跳过权限验证。
# mysql -u root 3、重开一个终端以root身份登录mysql。

mysql> use mysql;

 4、修改root用户口令。

 代码如下 复制代码

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set Password = PASSWORD(''root'') where User =''root'';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> exit

# /etc/init.d/mysql restart 5、结束mysql安全模式,用正常模式运行mysql。
mysql> update mysql.user set password=PASSWORD(''新密码'') where User=''root'';

6、试试你新修改的口令

 代码如下 复制代码
mysql> flush privileges;
mysql> quit

Mysql LIMIT如何正确对其进行优化

Mysql LIMIT如何正确对其进行优化

以下的文章主要是对Mysql LIMIT简单介绍,我们大家都知道LIMIT子句一般是用来限制SELECT语句返回的实际行数。LIMIT取1个或是2个数字参数,如果给定的是2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。 初始行的偏移 量是0(不是1)

以下的文章主要是对mysql limit简单介绍,我们大家都知道limit子句一般是用来限制select语句返回的实际行数。limit取1个或是2个数字参数,如果给定的是2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。

初始行的偏移

量是0(不是1)。

<ol><li><span><span>mysql</span><span>&gt;</span><span> select * from table LIMIT 6,10;  </span></span></li></ol>
登录后复制

得到第7-16行

如果给定一个参数,它指出返回行的最大数目。

<ol><li><span><span>mysql</span><span>&gt;</span><span> select * from table LIMIT 5; </span></span></li></ol>
登录后复制

得到前5行

换句话说,LIMIT n等价于Mysql LIMIT 0,n。MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。同样是取10条数据

<ol><li><span><span>select * from yanxue8_visit limit 10000,10 </span></span></li></ol>
登录后复制
登录后复制

<ol><li><span><span>select * from yanxue8_visit limit 0,10 </span></span></li></ol>
登录后复制

就不是一个数量级别的。

网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200(下面附有原文)

文中不是直接使用limit,而是首先获取到offset的id然后直接使用Mysql limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核(3GHZ) +4G内存 mysql 5.0.19)

1、offset比较小的时候。

<ol><li><span><span>select * from yanxue8_visit limit 10,10 </span></span></li></ol>
登录后复制

多次运行,时间保持在0.0004-0.0005之间

<ol>
<li><span><span>Select * From yanxue8_visit Where vid </span><span>&gt;</span><span>=(  </span></span></li>
<li><span>Select vid From yanxue8_visit Order By vid limit 10,1  </span></li>
<li><span>) limit 10 </span></li>
</ol>
登录后复制

多次运行,时间保持在0.0005-0.0006之间,主要是0.0006结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。

2、offset大的时候

<ol><li><span><span>select * from yanxue8_visit limit 10000,10 </span></span></li></ol>
登录后复制
登录后复制

多次运行,时间保持在0.0187左右

<ol>
<li><span><span>Select * From yanxue8_visit Where vid </span><span>&gt;</span><span>=(  </span></span></li>
<li><span>Select vid From yanxue8_visit Order By vid limit 10000,1  </span></li>
<li><span>) limit 10 </span></li>
</ol>
登录后复制

多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。

附上原文:

select * from table LIMIT 5,10; #返回第6-15行数据

select * from table LIMIT 5; #返回前5行

select * from table LIMIT 0,5; #返回前5行

性能优化:

基于MySQL5.0中Mysql limit的高性能,我对数据分页也重新有了新的认识.

<ol>
<li><span><span>Select * From cyclopedia Where ID</span><span>&gt;</span><span>=(  </span></span></li>
<li><span>Select Max(ID) From (  </span></li>
<li><span>Select ID From cyclopedia Order By ID limit 90001  </span></li>
<li><span>) As tmp  </span></li>
<li><span>) limit 100;  </span></li>
<li>
<span>Select * From cyclopedia Where ID</span><span>&gt;</span><span>=(  </span>
</li>
<li><span>Select Max(ID) From (  </span></li>
<li><span>Select ID From cyclopedia Order By ID limit 90000,1  </span></li>
<li><span>) As tmp  </span></li>
<li><span>) limit 100;  </span></li>
</ol>
登录后复制

同样是取90000条后100条记录,第1句快还是第2句快?

第1句是先取了前90001条记录,取其中最大一个ID值作为起始标识,然后利用它可以快速定位下100条记录

第2句择是仅仅取90000条记录后1条,然后取ID值作起始标识定位下100条记录

第1句执行结果.100 rows in set (0.23) sec

第2句执行结果.100 rows in set (0.19) sec

很明显第2句胜出.看来limit好像并不完全像我之前想象的那样做全表扫描返回limit offset+length条记录,这样看来limit比起MS-SQL的Top性能还是要提高不少的.

其实第2句完全可以简化成

<ol>
<li><span><span>Select * From cyclopedia Where ID</span><span>&gt;</span><span>=(  </span></span></li>
<li><span>Select ID From cyclopedia limit 90000,1  </span></li>
<li><span>)limit 100; </span></li>
</ol>
登录后复制

直接利用第90000条记录的ID,不用经过Max运算,这样做理论上效率因该高一些,但在实际使用中几乎看不到效果,因为本身定位ID返回的就是1条记录,Max几乎不用运作就能得到结果,但这样写更清淅明朗,省去了画蛇那一足.

可是,既然MySQL有limit可以直接控制取出记录的位置,为什么不干脆用Select * From cyclopedia limit 90000,1呢?岂不更简洁?

这样想就错了,试了就知道,结果是:1 row in set (8.88) sec,怎么样,够吓人的吧,让我想起了昨天在4.1中比这还有过之的"高分".Select * 最好不要随便用,要本着用什么,选什么的原则, Select的字段越多,字段数据量越大,速度就越慢. 上面2种分页方式哪种都比单写这1句强多了,虽然看起来好像查询的次数更多一些,但实际上是以较小的代价换取了高效的性能,是非常值得的.

第1种方案同样可用于MS-SQL,而且可能是最好的.因为靠主键ID来定位起始段总是最快的.

<ol>
<li><span><span>Select Top 100 * From cyclopedia Where ID</span><span>&gt;</span><span>=(  </span></span></li>
<li><span>Select Top 90001 Max(ID) From (  </span></li>
<li><span>Select ID From cyclopedia Order By ID  </span></li>
<li><span>) As tmp  </span></li>
<li><span>)  </span></li>
</ol>
登录后复制

但不管是实现方式是存贮过程还是直接代码中,瓶颈始终在于MS-SQL的TOP总是要返回前N个记录,这种情况在数据量不大时感受不深,但如果成百上千万,效率肯定会低下的.相比之下MySQL的Mysql limit就有优势的多,执行:

<ol>
<li><span><span>Select ID From cyclopedia limit 90000  </span></span></li>
<li><span>Select ID From cyclopedia limit 90000,1 </span></li>
</ol><br><br>
登录后复制

而MS-SQL只能用Select Top 90000 ID From cyclopedia 执行时间是390ms,执行同样的操作时间也不及MySQL的360ms.


关于JS - 如何正确返回 mysql 查询值mysql返回json的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Angular 4如何正确返回void observable、linux 环境下如何正确设置 MYSQL 目录权限、linux中如何正确的修改MySQL密码、Mysql LIMIT如何正确对其进行优化等相关知识的信息别忘了在本站进行查找喔。

本文标签: