如何从左表中获取总记录,并在mysql中从右表中获取匹配的记录

时间:2017-01-30 10:04:17

标签: php 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

2 个答案:

答案 0 :(得分:1)

如果您想要每组的总计记录数,那么只需COUNT(*)。如果您希望histroy表中与hostels表中的某些内容匹配的记录数,那么您当前使用的COUNT(post_id)应该已经这样做了。如果您希望hostels的记录数与histroy中的任何内容匹配,那么您可以使用此代码:

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

答案 1 :(得分:0)

并非真正的解决方案更多的插图评论。 左(外)连接是从宿舍获取所有内容的正确方法,但聚合函数忽略空值。例如给出

drop table if exists t;

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

此查询

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

返回

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

如果您希望计数包含所有条目,那么您应该满足空值。