MYSQL Abfrageergbnis weiterverarbeiten Datum-Problem

Durch das Erzeugen der VIEW habe ich schon eine Vorauswahl getroffen. Die Datumsabfrage klappt auch, aber mein Ergebnis sieht so aus:
29-11-2015 2318
29-11-2015 2324

Ist schon die Hälfte der Miete.. Aber ich brauche noch die passenden Informationen zur ID. Gibt es da keine Möglichkeit? Leider kann man ja nicht mehr ANDs dazuschreiben.. Sonst wäre es ja einfach.. ;-)

Ich brauch nur einen Ansatz. Oder einen Schubs in die richtige Richtung. Bitte!
 
Jedes mal eine View erstellen -> Falscher Ansatz.

Alles in einem. Schwer ist es nicht
SQL:
select distinct 
	pm.*
from 
	wb16_postmeta as pm,
	(
		select 
			post_id, 
			str_to_date(meta_value, '%d-%m-%Y') AS start_date
		from wb16_postmeta 
		where meta_key='start-datum'
	) as sd
where 
	pm.post_id = sd.post_id
	and datediff(curdate(), sd.start_date) = 350

Bist du sicher, dass es =350 sein muss? Also nur was genau vor 350 Tagen war?

Ergänzt um deinen weiteren Filter der View
SQL:
select distinct 
	pm.*
from 
	wb16_postmeta as pm,
	(
		select 
			post_id, 
			str_to_date(meta_value, '%d-%m-%Y') AS start_date
		from wb16_postmeta 
		where meta_key='start-datum'
	) as sd
where 
	pm.post_id = sd.post_id
	and datediff(curdate(), sd.start_date) < 350
	and (
		pm.meta_key in ('name','kontakt','start-datum')
		OR pm.meta_value='conditioner'
	)
 
Das mit dem VIEW hab ich über
PHP:
$sql = "CREATE OR REPLACE VIEW auswahl_view AS
SELECT meta_value, meta_key, post_id FROM wb16_postmeta
WHERE
       meta_key='name' OR meta_key='kontakt' OR meta_key='start-datum' OR meta_value='conditioner'";
gedacht zu lösen..
Das Problem ist allerdings, dass ich eigentlich kein OR meta_value='conditioner' bräuchte sondern ein AND. Das heißt ich wollte erst eine Abfrage machen bei dem alle Datensätze die Meta_value='conditioner' haben aufgelistet werden und danach nach Datum gefiltert werden. Funktioniert nur leider nicht. Das Script soll dann 1 x täglich als cronjob laufen..

Ich hab das mal ausprobiert, aber jetzt funktioniert das Selektieren vom Datum nicht mehr? Er gibt mir jetzt zwar alle Informationen aber ohne Datums-Selektion.
 
Eine View, die erstellt man einmal und dann ist die da. Die ist Bestandteil des Programms.

Da du nur sehr spezifische Felder auswählst, würde ich eine Kreuztabelle erstellen und diese nach dem Gruppieren mit HAVING (ist wie ein WHERE, wird aber auf das gruppierte Ergebnis angewendet) ausfiltern

SQL:
select
    post_id,
    max(if(meta_key = 'name', meta_value, '')) AS name,
    max(if(meta_key = 'kontakt', meta_value, '')) AS kontakt,
    max(if(meta_key = 'start-datum', str_to_date(meta_value, '%d-%m-%Y'), '')) AS start_date,
    max(meta_value = 'conditioner') AS is_conditioner
from wb16_postmeta
group by post_id
having
    is_conditioner
    and datediff(curdate(), start_date) = 350
Das ergibt dann so etwas:
Code:
post_id | name  | kontakt | start_date | is_conditioner
--------|-------|---------|------------|---------------
      1 | meier |         | 2015-12-31 | 1
 
Vorsicht. Es heisst zwar Kreuztabelle oder Pivottabelle. Aber es ist ein Query. Die Daten sollten nicht so gespeichert werden. Damit kannst du einfach relativ elegant die wesentlichen Werte auslesen und konvertieren.
Hier lohnt es sich ev. die Kreuztabelle (ohne HAVING) als View zu speichern. Aber einmalig, nicht bei jedem lauf.
 

Neue Beiträge

Zurück