情况如下:
有一个用户表
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是什么,如果我想用rubyonrails方式做的话 什么是ActiveRecord代码 我知道我可以一个接一个地将它们加在一起,但是在条件增加的同时浪费了太多的资源
答案 0 :(得分: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%')
答案 1 :(得分: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%'
答案 2 :(得分: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
您的用户数据表的结构方式,您几乎总是必须多次加入该表,以便将这些值“转移”到列中。我建议只创建一个名称和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