PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   In einem Feld identische Datensätze nur einmal ausgeben (http://www.selfphp.de/forum/showthread.php?t=22598)

fortyseven11 25.12.2009 23:08:54

In einem Feld identische Datensätze nur einmal ausgeben
 
Hallo und frohe Weihnachten noch nachträglich :-)

ich habe folgenden Select:
$query="(select id,titel,quartal,startdatum,DATE_FORMAT(startdatum,'%d.%m.%Y') AS startdatum_de,DATE_FORMAT(enddatum,'%d.%m.%Y') AS enddatum_de,enddatum AS sort_date from termine where startdatum<CURDATE() AND enddatum>=CURDATE() order by sort_date asc) UNION (select id,titel,quartal,startdatum,DATE_FORMAT(startdatum,'%d.%m.%Y') AS startdatum_de,DATE_FORMAT(enddatum,'%d.%m.%Y') AS enddatum_de,startdatum AS sort_date from termine where startdatum>=CURDATE() order by sort_date asc) order by sort_date asc";

Nun möchte ich Datensätze, die den gleichen titel haben nur einmal ausgeben: In der Tabelle befinden sich immer bis zu zwei Datensätze, die bis auf den Wert von id und Quartal identisch sind. Von diesen beiden Datensätzen möchte ich immer nur einen ausgeben (welcher ist egal) und ich möchte sicherheitshalber den Vergleich auf das Feld titel beschränken.

Über ein paar Anregungen würde ich mich sehr freuen (mit distinct und group by habe ich bereits erfolglos experimentiert).

Vielen Dank schon im voraus …

Ckaos 29.12.2009 08:00:11

AW: In einem Feld identische Datensätze nur einmal ausgeben
 
Hi

Also ich verstehe dein UNION nicht.
Deine abfrage ohne UNION.
Code:

select id,titel,quartal,startdatum,DATE_FORMAT(startdatum,'%d.%m.%Y') AS startdatum_de,DATE_FORMAT(enddatum,'%d.%m.%Y') AS enddatum_de,enddatum AS sort_date1,startdatum as sort_date2 from termine where (startdatum<CURDATE() AND enddatum>=CURDATE()) or (startdatum>=CURDATE()) order by sort_date1,sort_date2 asc
Ergibt das vielleicht auch dein gewünschtes Ergebnis?
Wenn ja dann dazu group by
Code:

select id,titel,quartal,startdatum,DATE_FORMAT(startdatum,'%d.%m.%Y') AS startdatum_de,DATE_FORMAT(enddatum,'%d.%m.%Y') AS enddatum_de,enddatum AS sort_date1,startdatum as sort_date2 from termine where (startdatum<CURDATE() AND enddatum>=CURDATE()) or (startdatum>=CURDATE()) group by titel order by sort_date1,sort_date2 asc
Und wie immer bitte mit Explain deine select's prüfen / auswerten.

mfg

Ckaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:25:03 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.