[PHP/SQL] select-query met voorkeurscondities

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ajpohv
  • Registratie: April 2002
  • Laatst online: 16:21
Voor de ontwikkeling van m'n eigen cms-je loop ik tegen een sql vraagstelling waar ik geen (goede) oplossing voor vind.

Ik wil graag een sql (eventueel in combinatie met php) query opzetten aan de hand van voorkeur condities. Het gaat hier om de selectie van een pagina versie. Ik heb de volgende twee tabellen (cellen die er niet toe doen heb ik even weggelaten):
Tabel 1: pages
id
autoincrement id


Tabel 2: page_version
idpage_idpublishedpublish_dateexpire_date
autoincrement idid from pages0 (niet gepubliceerd) of 1 (wel gepubliceerd)tijd in seconden (mktime())tijd in seconden (mktime())


Nu wil ik graag de volgende pagina versie ontvangen:
- Pagina is gepubliceerd (published = 1) EN publicatiedatum is in het verleden (publish_date <= mktime()) EN vervaldatum is in de toekomst of null (expire_date >= mktime() or expire_date == "").
- Als er geen pagina is die gepubliceerd is (published = 0), dan wil ik evengoed de pagina met publicatiedatum is in het verleden (publish_date <= mktime()) EN vervaldatum is in de toekomst of null (expire_date >= mktime() or expire_date == "").
- Als er geen pagina die niet gepubliceerd (published = 0) en de publicatiedatum is >= nu (mktime()) dan wil ik deze.
- Anders wil de pagina die overblijft.

Uit de query moet altijd 1 en maximaal 1 paginaversie komen en daarbij dus de meest actuele gepubliceerd of geplande paginaversie.

Graag jullie hulp!

It's a beautiful day!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:54

Janoz

Moderator Devschuur®

!litemod

Begrijp ik goed dat je koste wat kost een pagina wilt tonen, zelfs wanneer de gebruiker aangegeven heeft dat de pagina nog niet gepubliceerd is? Los van hoe je dit doet zou ik toch even goed bij jezelf af gaan vragen wat dan nog de waarde is van het gepubliceerd veld.

Oplossing moet je niet zoeken in de where, maar in de order by icm een top/limit, en als je er dan nog niet helemaal bent kun je ook alle versies van de pagina ophalen en in php uitzoeken welke je wilt hebben.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 17:18

DexterDee

I doubt, therefore I might be

^^ Eens met Janoz

Je kunt natuurlijk ook een query maken die de laatste gepubliceerde én de laatste draft versie retourneert. Een dergelijke business logica die jij nastreeft in een query is oninteressant, aangezien de code die de query uitvoert een uitstekende plaats is om dit te bepalen.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • ajpohv
  • Registratie: April 2002
  • Laatst online: 16:21
Begrijp ik goed dat je koste wat kost een pagina wilt tonen, zelfs wanneer de gebruiker aangegeven heeft dat de pagina nog niet gepubliceerd is? Los van hoe je dit doet zou ik toch even goed bij jezelf af gaan vragen wat dan nog de waarde is van het gepubliceerd veld.
Ja, dat begrijp je goed. Deze query is dan ook niet bedoeld voor de website zelf (frontend), maar voor de opbouw van de paginaboomstructuur in het cms. En daar is het interessant om de gebruiker de huidige (niet)gepubliceerd werkversie te presenteren. De gebruiker kan later altijd nog een andere selectie maken tussen de verschillende versie, maar dat is dan de keuze van de gebruiker.

Dank voor de suggesties! Ik ga hier alvast mee aan de slag.

It's a beautiful day!