2017-01-30 1 views
0

Ich habe 2 Tabelle. Wie bekomme ich vollständige Datensätze aus der linken Tabelle und die passenden Datensätze aus der richtigen Tabelle in mysql? Ich benutze unten Abfrage, aber es wird nur übereinstimmende Datensätze aus zwei Tabellen erhalten.Wie bekomme ich insgesamt Datensätze aus der linken Tabelle und die passenden Datensätze Formular rechte Tabelle in 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

Können Sie einige Beispieldaten zeigen, um zu veranschaulichen, was Sie hier wollen? Ihre Frage ist mir im Kontext einer 'GROUP BY'-Abfrage unklar. –

+0

Sie müssen alle Spalten mit Ausnahme von COUNT (post_id) als pid in Ihrer group by -Klausel hinzufügen. –

+0

Vielleicht [diese Frage] (http://stackoverflow.com/questions/3453809/how-to-use-mysql-found-rows-in-php) wird Ihnen helfen –

Antwort

1

Wenn Sie die Anzahl der insgesamt Datensätze pro Gruppe wollen, dann nur COUNT(*). Wenn Sie die Anzahl der Datensätze aus der Tabelle histroy möchten, die mit etwas in der Tabelle hostels übereinstimmt, sollte Ihre aktuelle Verwendung von COUNT(post_id) dies bereits tun. Wenn Sie die Anzahl der Datensätze in hostels wollen, die in histroynicht Spiel zu etwas getan hat, dann können Sie diese verwenden:

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

Ist das das gleiche wie "passt nichts "oder ist das nur" passt nicht zu etwas " – Strawberry

0

Nicht wirklich eine Lösung mehr ein illustriertes Kommentar. Ein linker (äußerer) Join ist der korrekte Weg, um alles von Host zu bekommen, aber Aggregatfunktionen ignorieren Nullwerte. zum Beispiel

gegeben
drop table if exists t; 

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

diese Abfrage

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

kehrt

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

Wenn Sie die Zählung, um alle Einträge wollen, dann sollten Sie für die Nullwerte bieten.

Verwandte Themen