2016-06-23 32 views
2

Ich versuche, Daten aus der Wp_usermeta-Tabelle der Wordpress-Datenbank zu erhalten.CASE WHEN Abfrage keine erwarteten Ergebnisse

Für diejenigen, die nicht mit ihm familliar sind, ist die Struktur wie folgt:

umeta_id | user_id | meta_key | meta_value 
1  | 1  | role  | admin 
2  | 1  | lat  | 12.34456 
3  | 1  | lng  | 9.392933 
4  | 2  | role  | user 
5  | 2  | lat  | 8.694840 
6  | 2  | lng  | 29.32930 
7  | 3  | role  | subscriber 
8  | 3  | lat  | 32.32323 
9  | 3  | lng  | 3.222222 
10  | 3  | some key | some value 
... and so on 

Jetzt habe ich einen Eintrag mit Breiten- und Längen bekam Koordinaten in der Tabelle, die durch die meta_key definiert werden "lat" oder "long" und der meta_value sind die Koordinaten.

Ich möchte jeden Benutzer mit ihren lat und lange coords erhalten, wie folgt aus:

user_id | lat  | lng 
1  | 12.34456 | 9.392933 
2  | 8.694840 | 29.32930 
3  | 32.32323 | 3.222222 

Dafür habe ich zur Zeit bin mit dieser Abfrage:

SELECT umeta.user_id, 
max(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value END) AS lat, 
max(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value END) AS lng 
FROM wp_usermeta umeta 

Was mich nur gibt:

user_id | lat  | lng 
1  | 12.34456 | 9.392933 

Haben Sie eine Ahnung, was ich falsch mache? Hilfe wirklich geschätzt!

Antwort

3

Sie müssen auch Gruppe durch die Benutzer-ID die Pivot-Abfrage wie erwartet zu machen:

SELECT umeta.user_id, 
     MAX(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value ELSE 0 END) AS lat, 
     MAX(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value ELSE 0 END) AS lng 
FROM wp_usermeta umeta 
GROUP BY umeta.user_id 

I enthalten einen expliziten ELSE Zustand einen 0 Wert, obwohl Sie diese nicht benötigen.

+1

Problem gelöst, danke! :) – Philex

1

Sie haben GROUP BY zu verwenden:

SELECT umeta.user_id, 
     max(CASE WHEN umeta.meta_key = "lat" THEN umeta.meta_value END) AS lat, 
     max(CASE WHEN umeta.meta_key = "lng" THEN umeta.meta_value END) AS lng 
FROM wp_usermeta umeta 
GROUP BY umeta.user_id 

Ohne GROUP BY Klausel, die Abfrage, die eine Aggregatfunktion in der SELECT Klausel enthält, gibt immer einen Datensatz.

+0

Danke für Ihre Hilfe, löste das Problem :) – Philex

Verwandte Themen