如果我要找 分类1,分类2,分类3 都符合的产品;但是如果没有找到数据,或者数据太少。就找符合其中2个分类的数据,如此类推;怎么才可以完成这个业务逻辑啊??非得要搜索多次数据库吗?谢谢各位。

解决方案 »

  1.   

    table A(分类表)
    id      name
    1 分类1
    2 分类2
    3 分类3
    4 分类4
    5 分类5
    6 分类6table B(材质表)
    id       name
    1 材质1
    2 材质2
    3 材质3
    4 材质4
    5 材质5
    6 材质6table C(颜色表)
    id     name
    1 颜色1
    2 颜色2
    3 颜色3
    4 颜色4
    5 颜色5
    6 颜色6table D(产品表)
    id  product_name 分类id  材质id  颜色id
    1 产品1      1      2       1 
    2 产品2      1      1       1 
    3 产品3      2      2       4
    4 产品4      3      5       6
    5 产品5      3      4       2 
    6 产品6      1      2       5假如我要搜索 有(分类1 并且 材质2 并且 颜色1) 的产品,需要5条数据;
    如果是select * from 产品表D where 分类id=1 and 材质id=2 and 颜色id=3 ;
    就只能找到一条数据,就是产品1;但是现在不足5条数据;我就要继续查找;
    变成 select * from  产品表D where 分类id=1 and 材质id=2  ; (比上一个条件减少了一个条件)
    现在只能找到产品2和产品1两条数据;数据还是不足5条;还要继续搜索,如此类推;
      

  2.   

    可以试试left join,把过滤条件构造为一个表:
    select  a.* from 产品表D  a left join (select  1 as 分类id,2 as 材质id,3 as 颜色id) b 
    on a.分类id=b.分类id  and a.材质id=b.材质id and a.颜色id=b.颜色id
      

  3.   


    你先不考虑用sql来实现,如果你自己写程序,你要如何实现。你这个要实现的功能里面是有一个分支判断的,如果结果集1数据少了,就查询结果集2,如果结果集2少了,就查询结果集3
      

  4.   


    我觉得你这种,可以考虑用存储过程来实现,最后返回一个结果,先执行sql1,然后根据结果的条数,判断是否要继续查sql2
      

  5.   

    select *
    from 产品表 p
    where 分类id=1 or 材质id=2 or 颜色id=3
    order by (分类id=1)+(材质id=2)+(颜色id=3) desc
    limit 5