Dames en heren,

Ik probeer uit twee tabellen met dezelfde velden de laatste 5 waardes eruit te halen gesorteerd op inputDatum. Dus een mix uit de twee tabellen en dan de laatste 5 gegevens

Tabel ziet er als volgt uit:
blogOnderwerpen
id | inputDatum

nieuwsOnderwerpen
id | inputDatum

Nu wil ik afhankelijk van de inputDatum de 5 laatste resultaten weer geven uit deze tabellen.
Hoe kan ik dit doen? Dus welke query heb ik hiervoor nodig?
Ik denk dat dit al in de goede richting is?

<?php

$query = "SELECT * FROM blogOnderwerpen bO JOIN nieuwsOnderwerpen nO ON bO.inputDatum = nO.inputDatum ORDER BY bO.inputDatum DESC LIMIT 5";

?>
Timothy Callemein op 25/01/2014 12:35:15

Ik denk dat dit al in de goede richting is?

<?php

$query = "SELECT * FROM blogOnderwerpen bO JOIN nieuwsOnderwerpen nO ON bO.inputDatum = nO.inputDatum ORDER BY bO.inputDatum DESC LIMIT 5";

?>


Met deze query krijg ik geen resultaten maar er staan wel gegevens in?

Ik denk het niet, er is geen enkele relatie tussen die twee tabellen dus kan niet met een join, maar wel met een Union:

(SELECT
 	inputdatum,
	content
FROM
	blogOnderwerpen
)
UNION ALL
(SELECT
 	inputdatum,
	content
FROM
	nieuwsOnderwerpen
)
ORDER BY inputdatum DESC LIMIT 5

En dan zou inputdatum een datetime kolom moeten zijn.

Let op dat je in beide selects hetzelfde aantal kolommen opgeeft, en houdt er rekening mee dat in het resultaat de kolomnamen van de eerste select gebruikt worden.
Ger van Steenderen op 25/01/2014 13:20:45

Ik denk het niet, er is geen enkele relatie tussen die twee tabellen dus kan niet met een join, maar wel met een Union:

(SELECT
 	inputdatum,
	content
FROM
	blogOnderwerpen
)
UNION ALL
(SELECT
 	inputdatum,
	content
FROM
	nieuwsOnderwerpen
)
OEDER BY inputdatum DESC LIMIT 5

En dan zou inputdatum een datetime kolom moeten zijn.

Let op dat je in beide selects hetzelfde aantal kolommen opgeeft, en houdt er rekening mee dat in het resultaat de kolomnamen van de eerste select gebruikt worden.


Wanneer ik deze uitvoer krijg ik de volgende foutmelding:
(SELECT
inputDatum

FROM
blogOnderwerpen
)
UNION ALL
(SELECT
inputDatum

FROM
nieuwsOnderwerpen
)
OEDER BY inputDatum DESC LIMIT 5


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OEDER BY inputDatum DESC LIMIT 5' at line 14

[size=xsmall]Toevoeging op 25/01/2014 13:26:29:[/size]

THX order by stond een foutje in maar dat werkt!! SUPER BEDANKT!!

[size=xsmall]Toevoeging op 25/01/2014 13:34:16:[/size]

Nog 1 vraag. Is het mogelijk om in de code te controleren of de gegevens uit blog of nieuws komen?

zoiets als:
if (Blog)
{

} elseif (nieuws)
{

}
Excuus voor de typo.

Je kan dat in de query meenemen dmv een virtuele kolom:

SELECT
	'blog' AS type,
....
....
SELECT
	'nieuws' AS type,
....
....

is maar een ideetje, maar zou 1 tabel genaamd Onderwerpen met een kolom "type" waarin dan de values (of id's voor) Blog en Nieuws zouden staan niet handiger zijn?

Net getest en mijn code werkt ook, buiten het schoonheidsfoutje AS


SELECT * 
FROM blogonderwerpen AS bo
JOIN nieuwsonderwerpen AS no ON bo.inputDatum = no.inputDatum
ORDER BY bo.inputDatum DESC 
LIMIT 5


Verdere info:
http://www.w3schools.com/sql/sql_join.asp
dan heb je dus alleen de records voor de dagen waarop zowel een blog- als een nieuwsonderwerp aanwezig is....
Plus het feit dat records worden samengevoegd, dus je krijgt nooit het juiste resultaat.
Ik dacht net dat het de bedoeling was dat er een " mix uit de twee tabellen" werd gegenereerd, met dezelfde datums...

Misschien snap ik het probleem dan niet :s

Want als ik die query uitvoer krijg ik, een mix van 2 tabellen in 1 table met de laatste 5 records waar de inputdatums gelijk zijn.

Reageren