2017-01-30 4 views
0

私は2つのテーブルを持っています。どのように左のテーブルからの合計レコードを取得し、一致したレコードは、mysqlの右のテーブルを形成する?私は以下のクエリを使用していますが、2つのテーブルから一致するレコードのみを取得します。どのように左のテーブルからの合計レコードを取得し、一致したレコードは、mysqlの右テーブルをフォーム

SELECT post_id,COUNT(post_id) as pid,hostel_id,ht.user_id,hostel_name, 
     hostel_type,hostel_district,hostel_area,post_date,hostel_rent,hostel_respond, 
     h_contact_num,created_date,h_food_type 
FROM hostels ht 
left join histroy hr 
    ON ht.hostel_id =hr.post_id 
WHERE ht.hostel_district=$city_code AND 
     ht.status='1' AND 
     hr.post_type='Hostel' 
GROUP BY hr.post_id 
ORDER by pid DESC 
+0

いくつかのサンプルデータを表示して、ここで必要なものを説明できますか?あなたの質問は、 'GROUP BY'クエリの文脈で私には不明です。 –

+0

あなたのgroup by節に 'COUNT(post_id)as pid'を除くすべての列を追加する必要があります。 –

+0

多分[この質問](http://stackoverflow.com/questions/3453809/how-to-use-mysql-found-rows-in-php)はあなたを助けます –

答えて

1

あなたはその後、グループごとレコードの数だけCOUNT(*)をしたい場合。 hostelsテーブルにあるものと一致するhistroyテーブルのレコード数が必要な場合は、現在COUNT(post_id)を使用している必要があります。あなたはhistroyで何にもない試合をしましたhostels内のレコード数をしたい場合は、これを使用することができます:

SUM(CASE WHEN post_id IS NULL THEN 1 ELSE 0 END) AS num_hostels_no_match 
+0

それは "何とも一致しません"それはちょうど"何かにマッチしない " – Strawberry

0

ない本当に多くのソリューション図示コメント。 ホステルからすべてを取得する正しい方法は左(外部)結合ですが、集約関数はNULL値を無視します。例えば

MariaDB [sandbox]> select count(val) nonnullcount 
    -> from t; 

戻り

+--------------+ 
| nonnullcount | 
+--------------+ 
|   2 | 
+--------------+ 
1 row in set (0.00 sec) 

はあなたがカウントはすべてのエントリを含める場合、あなたはnull値の要求を満たす必要があり、このクエリ

drop table if exists t; 

create table t (id int, val int); 
insert into t values 
(1,1),(2,null),(3,3); 

を与えられました。

関連する問題