2015-04-24 4 views
5

Hallo, so vor allem, ich bin nicht dieser Experte in MySQL-Abfragen. Ich habe Schlepptau Tabellen wp_posts und wp_wti_like_post und ich tue LEFT JOIN auf wp_wti_like_post ON wp_posts.ID = wp_wti_like_post.post_id und SUM(wp_wti_like_post.value) < 2 aber wenn es no row in wp_wti_like_post mit id Post von wp_posts ist dann zeigt es nicht einmal die Zeile aus wp_posts und ignoriert es einfach, bitte helfen Sie in diesem brauche es wirklich.Mysql Abfrage ignoriert die Zeile, wenn untergeordnete Zeile von links Join-Tabelle nicht existiert

query:

SELECT * 
FROM wp_posts 
LEFT JOIN wp_wti_like_post ON wp_posts.ID = wp_wti_like_post.post_id 
WHERE wp_posts.post_status = 'publish' 
GROUP BY wp_wti_like_post.post_id 
HAVING SUM(wp_wti_like_post.value) <2 
OR SUM(wp_wti_like_post.value) = NULL 
LIMIT 0 , 200 

Tisch wp_wti_like_post

http://prntscr.com/6xixrd

Tisch wp_posts

http://prntscr.com/6xixzp

+0

natürlich sein . Du wählst implizit nur Zeilen aus, in denen 'wp_wti_like_post' einen Wert in deinen' having'- und 'group'-Klauseln hat. –

+0

@pala_ es macht immer noch dasselbe, es ignoriert die Zeile, wenn die Zeile in wp_wti_like_post nicht existiert –

+0

@pala_ also was kann die Lösung sein? das ist, was ich habe Probleme in, –

Antwort

0

So sortiert ich dies durch meine Selbst und gehen sie auf diese Weise ignoriert

am Ort der

SUM(wp_wti_like_post.value) = NULL 

arbeiten müssen es sollte

SUM(wp_wti_like_post.value) IS NULL 
0

Unter Umständen müssen Sie Ihre Abfrage restrukturieren wie folgt:

SELECT * FROM 
(
    SELECT WP.*, SUM(LP.value) AS `value` 
    FROM wp_posts WP 
    LEFT JOIN 
     (SELECT post_id FROM wp_wti_like_post WHERE post_status = 'publish') LP 
     ON WP.ID = LP.post_id 
    GROUP BY WP.ID 
) T1 
WHERE T1.value IS NULL 
OR T1.value < 2; 

Die Innerste-Abfrage ruft zuerst nur wti_like_posts ab, die veröffentlicht wurden.

Dann wird der Link-Join durchgeführt, der Ihnen das erwartete Ergebnis liefert, alle Zeilen aus wp_posts zu holen, auch wenn sie nicht mit einem Datensatz aus der Sub-Abfrage verbunden sind.

Nachdem dies durchgeführt wurde, führt die GROUP-Anweisung die Berechnung von SUMMEN der Werte durch.

Die äußerste Abfrage erzwingt die Anforderung, dass die Summe entweder kleiner als 2 oder null sein muss.