[GastForen Programmierung/Entwicklung PHP und MySQL Sortierungsabfrage

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Sortierungsabfrage

HackTack
Beiträge gesamt: 11

25. Jun 2007, 14:28
Beitrag # 1 von 7
Bewertung:
(1636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Möchte nach folgenden Werten sortieren, als erstes nach Anmeldeschluss, Start und dann Preis. Dies sind alles Datumswerte. Wenn nun Anmeldeschluss "NULL" bzw. leer ist, dann sortiere nach Start und wenn dieses leer ist nach Preis.

sollte ich das mit Unterabfragen realisieren? Kann ich im Query eigentlich mit IF arbeiten ?

Danke
X

Sortierungsabfrage

oesi50
  
Beiträge gesamt: 2315

25. Jun 2007, 15:22
Beitrag # 2 von 7
Beitrag ID: #298740
Bewertung:
(1625 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo HackTack,

ganz einfach
Code
... 
ORDER BY Anmeldeschluss, Start, Preis
...


Antwort auf: Kann ich im Query eigentlich mit IF arbeiten ?


Ja

Antwort auf: sollte ich das mit Unterabfragen realisieren?


nein


als Antwort auf: [#298722]

Sortierungsabfrage

HackTack
Beiträge gesamt: 11

25. Jun 2007, 16:08
Beitrag # 3 von 7
Beitrag ID: #298750
Bewertung:
(1616 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke!

Ich habe das Problem, dass ich zunächst alle Datensätze bekomme, die den Wert NULL haben. Die sollen zum Schluss, wenn keine Datumswerte vorhanden sind hinzugefügt werden.
Ich versuche gerade deas Problem so zu lösen:

Code
 select a.ID,  
a.NAME,
if (DATE_FORMAT(a.ENDE,'%d.%m.%Y') <> NULL, 0,1)as `ENDE`,
if (DATE_FORMAT(a.START,'%d.%m.%Y') <> NULL, 0,1) as `START`,
if (DATE_FORMAT(a.PREISVERLEIHUNG,'%d.%m.%Y') <> NULL, 0,1) as `PREIS`,
if (DATE_FORMAT(a.ENDE,'%d.%m.%Y') = NULL, 0,1) as `LEER`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz` as a, `bzbereich` as ab


Erst prüfe ich ob die Werte <> "NULL" sind, wenn das der Fall ist, zeige mir die zuerst. Wie bekomme ich jetzt die restlichen Daten, indenen kein Datumswert vorhanden sind abgefragt?


als Antwort auf: [#298740]

Sortierungsabfrage

oesi50
  
Beiträge gesamt: 2315

25. Jun 2007, 16:46
Beitrag # 4 von 7
Beitrag ID: #298763
Bewertung:
(1609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
so in der Art könnte dein Problem gelöst werden:

Code
( 
SELECT *
FROM `test`
WHERE START IS NOT NULL
AND ENDE IS NOT NULL
AND Preisverleihung IS NOT NULL
ORDER BY START , Ende, Preisverleihung
)
UNION
(
SELECT *
FROM `test`
WHERE START IS NULL
OR ENDE IS NULL
OR Preisverleihung IS NULL
ORDER BY START , Ende, Preisverleihung
)



als Antwort auf: [#298750]

Sortierungsabfrage

HackTack
Beiträge gesamt: 11

26. Jun 2007, 12:54
Beitrag # 5 von 7
Beitrag ID: #298941
Bewertung:
(1592 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe es nun so gelöst, leider sortiert er nicht nach a.ENDE. Warum sortiert er nicht nach diesem Datumswert?

$sql = "(select
a.ID,
a.PREIS,
a.NAME,
a.START,
DATE_FORMAT(a.ENDE,'%d.%m.%Y') as `ENDE`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz` as a, `bz_bereich` as ab
WHERE 1
AND a.ENDE > NOW()
AND ab._ID=a.ID
AND ab.BEREICH_ID=".$bereich."
AND a.PROBE=0
ORDER BY a.ENDE DESC)
UNION
(select
a.ID,
a.PREIS,
a.NAME,
a.START,
DATE_FORMAT(a.ENDE,'%d.%m.%Y') as `ENDE`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz_award` as a, `bz_bereich` as ab
WHERE a.START > NOW()
AND ab._ID=a.ID
AND ab.BEREICH_ID=".$bereich."
AND a.PROBE=0
ORDER BY a.START )
UNION
(select
a.ID,
a.PREIS,
a.NAME,
a.START,
DATE_FORMAT(a.ENDE,'%d.%m.%Y') as `ENDE`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz_award` as a, `bz_bereich` as ab
WHERE a.PREIS > NOW()
AND ab._ID=a.ID
AND ab.BEREICH_ID=".$bereich."
AND a.PROBE=0
ORDER BY a.PREIS)
UNION
(select
a.ID,
a.PREIS,
a.NAME,
a.START,
DATE_FORMAT(a.ENDE,'%d.%m.%Y') as `ENDE`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz_award` as a, `bz_bereich` as ab
WHERE a.ENDE < NOW()
AND a.START < NOW()
AND a.PREIS < NOW()
AND ab._ID=a.ID
AND ab.BEREICH_ID=".$bereich."
AND a.PROBE=0
ORDER BY a.ENDE)
UNION
(select
a.ID,
a.PREIS,
a.NAME,
a.START,
DATE_FORMAT(a.ENDE,'%d.%m.%Y') as `ENDE`,
UNIX_TIMESTAMP(a.ENDE) as `TS_ENDE`,
UNIX_TIMESTAMP(a.DATUM) as `TS`,
a.KURZTEXT
from `bz_award` as a, `bz_bereich` as ab
WHERE a.ENDE is NULL
AND a.START is NULL
AND a.PREIS is NULL
AND ab._ID=a.ID
AND ab.BEREICH_ID=".$bereich."
AND a.PROBE=0
ORDER BY a.ID)
";


als Antwort auf: [#298763]

Sortierungsabfrage

oesi50
  
Beiträge gesamt: 2315

26. Jun 2007, 13:47
Beitrag # 6 von 7
Beitrag ID: #298961
Bewertung:
(1585 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
3. Fragen

Warum erzeugst du jedesmal ein kartesisches Produkt?

Wie soll denn das Ergebnis aussehen? Hast du ein Beispiel?

Sollen wirklich alle Termine von heute ausgeblendet werden?


als Antwort auf: [#298941]

Sortierungsabfrage

oesi50
  
Beiträge gesamt: 2315

26. Jun 2007, 14:15
Beitrag # 7 von 7
Beitrag ID: #298967
Bewertung:
(1583 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Es wird kein kartesisches Produkt erzeugt.
Ich habs nur nicht gleich gesehen(ist doch ganz schön unübersichtlich)


als Antwort auf: [#298961]
X