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とは何ですか、そしてActiveRecordコードとは何であるかをrubyonrailsで実行したい場合は、1つずつ実行してからすべてを結合できますが、条件が構築される間、リソースを浪費しすぎます

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 に答える