Hallo,

Ik heb een probleempje en weet niet of die makkelijk op te lossen is. Op een website komen de berichten te staan uit de database. Er zijn twee soorten berichten die allebei in een aparte tabel staan met allebei aparte velden, ze hebben alleen id, datum en naam gelijk. Kan ik dan middels één query alle data opvragen uit beide tabellen en deze dan ordenen op datum? Dat ze zeg maar gemixed worden, gesorteerd op datum? Hieronder een duidelijk voorbeeld:


tabel 1: 
.---------------------------------------------. 
| id | reeksid | naam | volgorde |    datum   | 
|---------------------------------------------| 
| 1  | 3       | test | 5        | 22-03-2008 | 
| 2  | 2       | rood | 2        | 11-02-2008 | 
| 3  | 3       | geel | 4        | 04-02-2008 | 
| 4  | 4       | roze | 3        | 31-07-2008 | 
| 5  | 4       | cbkw | 1        | 16-11-2008 | 
.---------------------------------------------. 

tabel 2: 
.-----------------------------------. 
| id | naam | volgorde |    datum   | 
|-----------------------------------| 
| 1  | sick | 1        | 29-03-2008 | 
| 2  | blue | 2        | 31-01-2008 | 
| 3  | give | 5        | 15-08-2008 | 
| 4  | free | 4        | 03-01-2008 | 
| 5  | star | 3        | 21-05-2008 | 
.-----------------------------------. 

samengevoegde tabel op datum gesorteerd: 
.-----------------------------------. 
| id | naam | volgorde |    datum   | 
|-----------------------------------| 
| 4  | free | 4        | 03-01-2008 | 
| 2  | blue | 2        | 31-01-2008 | 
| 3  | geel | 4        | 04-02-2008 | 
| 2  | rood | 2        | 11-02-2008 | 
| 1  | test | 5        | 22-03-2008 | 
| 1  | sick | 1        | 29-03-2008 | 
| 5  | star | 3        | 21-05-2008 | 
| 4  | roze | 3        | 31-07-2008 | 
| 3  | give | 5        | 15-08-2008 | 
| 5  | cbkw | 1        | 16-11-2008 | 
.-----------------------------------. 


Weet iemand welke query ik hiervoor moet gebruiken?

Alvast bedankt,
Stijn
Dat kan met een UNION. Maar eigenlijk klopt je datamodel niet. Lees een tutorial over normaliseren.
Jouw datums zijn geen datums, iso-formaat yyyy-mm-dd, daar valt dus niet op te sorteren.

Welke database gebruik je, welk datatype voor de datum gebruik je en hoe ziet jouw huidige query er uit?
[edit]Oei, te laat. De reacties van Jan en Frank zijn veel nuttiger...[/edit]
Het gaat niet zozeer om die data velden maar meer op de manier waarop het zou kunnen. Ik heb namelijk even snel een voorbeeldje in elkaar gezet zonder na te denken over de volgorde van de date velden. Maar het kan dus met union? Zou iemand de query voor dit voorbeeld in elkaar kunnen zetten? Dat zou in ieder geval wel heel fijn zijn!

Alvast bedankt,
Stijn

SELECT
	id,
	naam,
	volgorde,
	datum
FROM
	tabel1
UNION SELECT
	id,
	naam,
	volgorde,
	datum
FROM
	tabel2
ORDER BY
	datum ASC

Maar zoals gezegd zal deze query op dit moment geen juiste resultaten teruggeven. Jouw datum is geen datum, dus kun je er onmogelijk op sorteren...

Verder zou ik ook nog maar eens kijken naar het normaliseren van je datamodel. Ik weet niet hoe je datamodel er nu uit ziet, maar dit kan waarschijnlijk een hoop problemen in de toekomst voorkomen!
Dat moet je ff uittesten. Je moet iets hebben als:

(
SELECT id, naam, volgorde, datum
FROM tabel1
)
UNION
(
SELECT id, naam, volgorde, datum
FROM tabel2
)
waar je die ORDER BY dan precies moet plaatsen kan ik uit mijn hoofd niet zeggen. Testen dus ;)
Jan Koehoorn schreef op 21.01.2008 23:30
waar je die ORDER BY dan precies moet plaatsen kan ik uit mijn hoofd niet zeggen.
Die mag gewoon aan het einde van de query :-)
Haha ja ik heb de website niet gemaakt maar moest alleen een aanpassing doen dus ik ga niet het hele database model aanpassen want dan moet ik ook weer de hele site gaan omgooien en daar krijg ik niet voor betaald.. ;-) maar bedankt voor jullie snelle en goede hulp, ik ga het morgen even uitproberen!
@Hipska

Als je het zelf niet hebt gemaakt, en daar niet voor betaald krijgt, kan je het nog wel aanpassen.. Vraag je gewoon wat meer..
Zoals het nu is kost het heel veel moeite om het gesorteerd te krijgen op datum, waarom:

Omdat je database zelf nu niet op die datum kan sorteren. Je kan wel met strtodate alles omzetten naar een geldige datum, en die terugzetten in de database, of alles omzetten bij ophalen en in een array plaatsen en deze sorteren op datum.

Als je in de opdracht hebt gekregen ze te sorteren op datum, tjah.. Dan zou ik toch echt aanraden om een date type in je tabel te gebruiken in plaats van de huidige string, anders krijg je daar nog een harde kluif aan.
Okee, dan zul je deze "stoplap" moeten toepassen. Als ik jou was, zou ik het wel aan de klant mededelen. Dan weten ze namelijk dat ze de volgende keer beter jou kunnen inhuren.

Reageren