SQL Query - Ich steh grad auf dem Schlauch

bakterius

Benutzer
Beiträge
6
Hallo zusammen

Ich steh grad auf dem Schlauch und komme nicht weiter.

Ich habe zwei Tabellen (ist von Wordpress so vorgegeben). In der einen sind Einsätze und in der anderen sind die Metadaten zum Einsatz. Also wer, wann, wo etc.
Einfach dargestellt sieht das ganze so aus.

wp_posts
+----+-----------------+-----------------+-----------------+-----------------+
| ID | post_title | post_status | post_name | post_type |
+----+-----------------+-----------------+-----------------+-----------------+
| 1 | Einsatz #1 | publish | einsatz1 | fweinsatz |
| 2 | Einsatz #2 | publish | einsatz2 | fweinsatz |
| 3 | Einsatz #3 | publish | einsatz3 | fweinsatz |
| 4 | Einsatz #4 | publish | einsatz4 | fweinsatz |
| 5 | Einsatz #5 | publish | einsatz5 | fweinsatz |
| 6 | Einsatz #6 | draft | einsatz6 | fweinsatz |
| 7 | irgendwas | publish | irgendwas | blalabla |

wp_postmeta
+-----------+--------------+-----------------+---------------------+
| meta_id | post_id | meta_key | meta_value |
+-----------+--------------+-----------------+---------------------+
| 1 | 1 | datumzeit | 2018-01-01 00:00 |
| 2 | 1 | sankp | Kleinalarm |
| 3 | 2 | datumzeit | 2018-01-02 00:00 |
| 4 | 2 | sankp | Bagatellgruppe |
| 5 | 3 | datumzeit | 2018-05-05 00:00 |
| 6 | 3 | kpnord | Kleinalarm |
| 7 | 4 | datumzeit | 2018-03-18 00:00 |
| 8 | 4 | sankp | Kleinalarm |
| 8 | 4 | kpnord | Kleinalarm |


Um nun alle Einsätze abzufragen und zu sortieren nutze ich dieses SQL Statement:

SELECT wp_posts.*, wp_postmeta.*
FROM wp_posts
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
AND wp_postmeta.meta_key ="datumzeit"
WHERE (
wp_posts.post_type = "fweinsatz"
)
AND (
wp_posts.post_status = "publish"
)
ORDER BY wp_postmeta.meta_value DESC
LIMIT 0, 10

Soweit so gut.
Nun will ich aber nur die Einsätze rausholen, welche die SanKp (meta_key = sankp) geleistet hat.

Wie frage ich die Tabelle wp_postmeta zweimal ab? Zum einen benötige ich den Wert meta_value von meta_key "datumzeit", um die Einsätze chronologisch zu sortieren, anderseits benötige ich den Wert meta_key aber auch, um nur die Daten mit sankp auszulesen.

Hat jemand eine Idee?
 
Werbung:
Code:
test=*# SELECT wp_posts.*, wp_postmeta.*
FROM wp_posts
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID
AND wp_postmeta.meta_key ='datumzeit'
WHERE (
wp_posts.post_type = 'fweinsatz'
)
AND (
wp_posts.post_status = 'publish'
) and wp_postmeta.post_id in (select distinct post_id from wp_postmeta where meta_key = 'sankp')
ORDER BY wp_postmeta.meta_value DESC;
 id |  post_title  | post_status | post_name  | post_type | meta_id | post_id | meta_key  |  meta_value   
----+--------------+-------------+------------+-----------+---------+---------+-----------+-------------------
  4 |  Einsatz #4  | publish  |  einsatz4  | fweinsatz |  7 |  4 | datumzeit |  2018-03-18 00:00
  2 |  Einsatz #2  | publish  |  einsatz2  | fweinsatz |  3 |  2 | datumzeit |  2018-01-02 00:00
  1 |  Einsatz #1  | publish  |  einsatz1  | fweinsatz |  1 |  1 | datumzeit |  2018-01-01 00:00
(3 Zeilen)

test=*#

Dein Primary Key von wp_postmeta ist kapott, da sind doppelte Werte.
 
Werbung:
Vielen herzlichen Dank! Das klappt.

Uups, ja stimmt. Da stehen wirklich doppelte Daten drinn. Zum Glück nur ein Copy & Paste Fehler. In der Datenbank sind die Werte io.
 
Zurück
Oben