2016-05-29 1 views
3

現在、私はいくつかのデータを持つ2つのテーブルを持っています。最初の表にはあり、以下:参加者別のユーザーごとのMysql数

+----------------+-----------+ 
| name   | member_id | 
+----------------+-----------+ 
| Juice Box  |  49432 | 
| Rainsurge  |  49631 | 
| spiderpigrider |  50482 | 
+----------------+-----------+ 

2番目の表は、次のあります

+------------+-----------+ 
| recruit_id | bin(refs) | 
+------------+-----------+ 
|  49432 | 1   | 
|  49631 | 1   | 
|  49432 | 1   | 
|  49631 | 1   | 
|  49432 | 1   | 
|  49631 | 1   | 
|  49432 | 1   | 
|  49631 | 1   | 
|  49432 | 1   | 
|  49631 | 1   | 
+------------+-----------+ 

私は名前を返したい、合計レフリーとMEMBER_ID/recruit_idので(時を持つユーザーのみをリストのような少なくとも1参照)

+------------+-----------+------------+ 
| recruit_id | name  | total_refs | 
+------------+-----------+------------+ 
|  49631 | Rainsurge |   5 | 
|  49432 | Juice Box |   5 | 
+------------+-----------+------------+ 

select r.recruit_id,bin(r.refs),ipb.name from refs as r 
inner join syndicate_ipb.core_members as ipb on ipb.member_id=r.recruit_id; 

は、これが私のデータを返されたが、明らかに合計カウントと繰り返し名/ IDS

なし
select r.recruit_id,count(bin(r.refs)),ipb.name from refs as r 
inner join syndicate_ipb.core_members as ipb on ipb.member_id=r.recruit_id; 

これは誰の合計数とデータを返さだけ1つのID /名前

+------------+--------------------+-----------+ 
| recruit_id | count(bin(r.refs)) | name  | 
+------------+--------------------+-----------+ 
|  49432 |     10 | Juice Box | 
+------------+--------------------+-----------+ 

これはデータを返しますが、再び、カウント

select distinct r.recruit_id,bin(r.refs),ipb.name from refs as r 
inner join syndicate_ipb.core_members as ipb on ipb.member_id=r.recruit_id; 

+------------+-------------+-----------+ 
| recruit_id | bin(r.refs) | name  | 
+------------+-------------+-----------+ 
|  49432 | 1   | Juice Box | 
|  49631 | 1   | Rainsurge | 
+------------+-------------+-----------+ 

せずにすべてのヘルプや案内が大幅に高く評価されます。私は私がここに近づいているように感じるが、それを得るためにはSQLで十分に能力がない。ありがとう!

+2

あなたはほぼそこにいます! 'r.recruit_id'でグループ化する必要があります。 **これは次のとおりです:** 'r.recruit_id、count(bin(r.refs))を選択し、refsからipb.nameをrとして返します ipb.member_id = r.recruit_idのipbとして内部結合syndicate_ipb.core_membersを追加します。 GROUP BY r.recruit_id; ' – 1000111

+0

OMGそれでした!私は受け入れることができるので、あなたは答えとしてこれを投稿することができます!どうもありがとうございました! – driz

答えて

1

あなたはほぼそこにいました。最後にGROUP BY句が欠落しました。

問合せ:

SELECT 
    r.recruit_id, 
    count(bin(r.refs)), 
    ipb.name 
FROM refs AS r 
INNER JOIN syndicate_ipb.core_members AS ipb 
ON ipb.member_id = r.recruit_id 
GROUP BY r.recruit_id; 

注:

bin(refs)列は常に値1が含まれている場合、実際には、その列を維持する必要はありません。その場合は、count(*)またはcount(r.recruit_id)を使用してカウントを取得できます。

列に値が含まれている場合、countは正しい答えを得られません。その場合はsumSum(bin(refs))のように使用する必要があります。

1

あなたがgroup by句を使用する必要があります。

select r.recruit_id, ipb.name, count(bin(refs)) as total_refs 
    from refs as r 
     inner join syndicate_ipb.core_members as ipb 
       on ipb.member_id=r.recruit_id 
group by r.recruit_id, ipb.name 
having count(bin(refs)) >= 1 

このgroup by r.recruit_id, ipb.name意志グループの結果を、これhaving count(bin(refs)) >= 1はそれだけで少なくとも一つのREF

いますだけでなく、グループあなたの列を持つメンバーを返すことgaranteますあなたが望むものだけで。 MySqlはそれを許可しますが、SQL Ansiパターンではなく、MySqlでさえもこれに準拠しています。 select文の列全体で集約関数のグループ化を使用します。

+0

完璧な、私は実際にどこの句を追加する作業をしていたと私は予想:D – driz

+0

喜んで私は助けることができます。 –

+1

あなたは大きな助けになっていましたが、私は1000111を受け入れなければなりません。ただ彼らが答えとしてそれを追加するのを待っている!再度、感謝します! – driz

0
SELECT ipb.*, COUNT(`r`.`recruit_id`) AS cid FROM `ipb` 
INNER JOIN `r` ON `r`.`join_id` = ipb.`member_id` 
GROUP BY ipb.`member_id` 
関連する問題