zoukankan      html  css  js  c++  java
  • SQL“多字段模糊匹配关键字查询”[转载] Virus

    转载地址:
    http://www.newasp.net/tech/data/24332.html

    我们开发MYSQL数据库应用时,常常需要用到模糊查询。如果同一个条件需要匹配很多字段怎么办呢?通常,程序员会每个字段都在SQL中“field like'%cond%'”一次。这样,SQL语句会长得惊人,碰上复杂一点的,甚至SQL语句会因为超长而被数据库拒绝执行。其实,这个问题只要动动脑筋就很容易解决:首先,将要匹配相同条件的字段连起来(field1+field2+...)成一个长字符串;然后再 Like “%cond%”就可以了。不过这种方法有个问题,就是得权衡多表连接造成的效率降低。一般来说,单表内字段肯定应该连接后再统一like判断;表间字段,则需要先过滤后,再实行这个策略。采取这个策略,不仅可以缩短SQL,而且能够有效地提高SQL的执行效率。


    例:

    QUOTE:
    create table orders (

    id int not null auto_increment,

    name varchar(100) not null,

    email varchar(255) not null,

    address text not null,

    pay_type char(10) not null,

    shipped_at datetime null,

    primary key (id)

    );

    里面有数据
    1 aaa aaa@gmail.com beijing cc 2006-10-11 16:17:26

    现在想要查找出email为aaa开头的,address为bei开头的记录

    那么一般我们会构建如下SQL
    select * from orders o where o.email like "aaa%" and o.address like "bei%"

    其实我们可以使用如下SQL来缩短SQL语句(也就是连接字段一起进行like操作)
    SELECT * FROM orders o where concat(o.email,o.address) like "bei%"
     
    多表的情况意思是说where子句先写连接子句进行过滤再写连接like语句进行检索
    比如:
    SELECT * FROM line_items l,orders o where l.order_id=o.id and concat(l.quantity,o.email) like "bei%"

    其中line_items表
    create table line_items (
    id int not null auto_increment,
    product_id int not null,
    order_id int not null,
    quantity int not null default 0,
    unit_price decimal(10,2) not null,
    constraint fk_items_product
    foreign key (product_id) references
    products(id),
    constraint fk_items_order foreign
    key (order_id) references
    orders(id),
    primary key (id)
    );

    http://www.cnblogs.com/cmalaya/archive/2007/08/01/838309.html


    【Blog】http://virusswb.cnblogs.com/

    【MSN】jorden008@hotmail.com

    【说明】转载请标明出处,谢谢

    反馈文章质量,你可以通过快速通道评论:

  • 相关阅读:
    vpp + vxlan
    vpp + frrouting
    VPP + vxlan
    dpdk: Unsupported PCI device 0x19e5:0x0200 found at PCI address 0000:05:00.0
    How-to: Build VPP FD.IO with Mellanox DPDK PMD on top CentOS 7.7 with inbox drivers.
    vpp[73384]: register_node:485: process stack: Invalid argument (errno 22)
    鲲鹏920上vpp--dpdk编译
    编译frr--python版本问题--Python-3.7.7
    安装vpp
    Go排序
  • 原文地址:https://www.cnblogs.com/virusswb/p/1052829.html
Copyright © 2011-2022 走看看