0

情况如下:

有一个用户表

id     email      orders_counter
=================================
1      a@a.com    5
2      b@b.com    3
3      c@c.com    0

以及用户其他数据的用户数据表

id     user_id      title      value
=======================================
1      1            Name       Peter Johnson
2      1            Tel        31546988
3      2            Name       Alan Johnson
4      2            Tel        56984887

如果我想获取所有用户

1, orders_counter greater then 3
2, Name contain 'Johnson'
3, Tel contain '88'

同时

什么是我的 sql,如果我想用 ruby​​onrails 方式做,我知道 ActiveRecord 代码是什么,我可以一个一个然后将它们全部连接在一起,但是在条件建立时浪费了太多资源

4

3 回答 3

0

试试这个,

SELECT   a.*, b.*
FROM     user a
            INNER JOIN data b
                ON a.id = b.user_ID
WHERE   a.orders_counter > 3 AND
        (b.title = 'NAME' AND b.value like '%johnson%') AND
        (b.title = 'TEL' AND b.tel like '%88%')
于 2012-08-23T05:32:59.213 回答
0

试试这个:

select *
from  user U  join user_data D
on    U.id=D.user_id
where U.orders_counter>3
and   D.title='Name' and value like '%Johnson%'
and   D.title='Tel' and value like '%88%'
于 2012-08-23T05:33:30.713 回答
0
Select * From `user` u
inner join `userdata` d on d.user_id=u.id and d.title='Name' and d.value like '%Johnson%'
inner join `userdata` c on c.user_id=u.id and c.title='Tel' and c.value like '%88%'
where orders_counter > 3

按照您构建用户数据表的方式,您几乎总是必须多次加入该表才能将这些值“透视”到列中。我建议只创建一个以 name 和 tel 作为列的表。然后查询变得更加简单

select * from `user` u
inner join `user_data` d on d.Tel like '%88%' and d.Name like '%johnson%'
where u.orders_counter > 3
于 2012-08-23T05:34:20.400 回答