Beste PHP-hulpers,

Graag wil ik een site maken met een aantal links per provincie. In de database geef ik bij de link met een getal (1=Groningen,12=Limburg enz.) aan welke provincie.

Met de volgende code maak ik twaalf provincies in PHP:

$arr = array('Groningen','Friesland','Drenthe','Overijssel','Flevoland','Gelderland','Utrecht','Noord-Holland','Zuid-Holland','Zeeland','Noord-Brabant','Limburg');
foreach ($arr as &$value)
{
    echo $value;
}


Hoe kan ik nu met het uitvoeren van één MySQL-query hier 5 links per provincie tonen?
Het zou fijn zijn als je met een oplossing komt, Noppes. Of in ieder geval kunt vertellen waar deze basisinformatie op internet te vinden is. Hier schiet niemand iets mee op.

Niek, helaas is dit voor MS SQL en niet voor MySQL. Toch hartelijk dank voor het meedenken.
Ik ben nog steeds benieuwd naar de oplossing van Noppes.
Noppes, uit jouw eerdere opmerkingen in deze topic leid ik af dat jij weet hoe je het probleem van de topicstarter kunt oplossen. Hartstikke mooi dat jij een oplossing weet! Blijkbaar ben je de enige op dit forum die weet hoe je met 1 query de juiste gegevens kunt ophalen.

Aangezien de topicstarter al sinds dinsdagmiddag op een oplossing wacht, zou ik het zeer op prijs stellen als jij hier jouw oplossing wilt laten zien zodat de topicstarter weer vooruit kan.

Ik hoop wel dat je deze keer echt de oplossing wilt geven en niet weer gaat zeggen dat het onder basiskennis MySQL valt. Misschien is dat wel zo, maar niet iedereen beschikt over dezelfde kennis en... we zijn hier om elkaar te helpen.

Ik reken er dan ook op dat jouw volgende reactie de oplossing brengt waarop we allemaal zitten te wachten. Alvast bedankt.
Gerben J op 17/11/2010 19:22:46

... ieder geval kunt vertellen waar deze basisinformatie op internet te vinden is. ....


http://www.google.com
Ben ook aan het googlen geweest en heb iets gevonden. Alleen de random wil nog niet lukken:

SELECT   p.province,
         p.url
FROM     (SELECT   province, 
                   url,
                   CASE WHEN province = @provincie
                        THEN @regel := @regel + 1 
                        ELSE @regel := 1 
                   END AS rank, 
                   @provincie := province 
          FROM     links 
          JOIN     (SELECT @regel := 0, @provincie := NULL) r
          ORDER BY rand()) p
WHERE    p.rank <= 5
ORDER by p.province
Jeroen Jansen op 19/11/2010 13:30:33

Ben ook aan het googlen geweest en heb iets gevonden. Alleen de random wil nog niet lukken:

SELECT   p.province,
         p.url
FROM     (SELECT   province, 
                   url,
                   CASE WHEN province = @provincie
                        THEN @regel := @regel + 1 
                        ELSE @regel := 1 
                   END AS rank, 
                   @provincie := province 
          FROM     links 
          JOIN     (SELECT @regel := 0, @provincie := NULL) r
          ORDER BY rand()) p
WHERE    p.rank <= 5
ORDER by p.province



Én dit is niet basis én dit is niet simpel én dit doet volgens mij niet wat het moet doen.
Karl,

ik heb het ook niet over simpel of basis gehad.
Ik heb de query getest op een eigen database met voetbalverenigingen en daarbij behorende elftallen.
De query gaf bij mij van iedere vereniging de eerste vijf elftallen en dat komt volgens mij toch aardig in de buurt bij wat de topicstarter wil hebben.
Jeroen Jansen op 19/11/2010 13:40:46

Karl,

ik heb het ook niet over simpel of basis gehad.
Ik heb de query getest op een eigen database met voetbalverenigingen en daarbij behorende elftallen.
De query gaf bij mij van iedere vereniging de eerste vijf elftallen en dat komt volgens mij toch aardig in de buurt bij wat de topicstarter wil hebben.

Hij doet het inderdaad. Ik verwees nog terug naar Noppes Homeland die niet meer wilt reageren.
Niet getest, maar een subquery op de eigen tabel zou de uitkomst kunnen bieden:


SELECT 
	t.* 
FROM 
	links AS t 
WHERE 
	t.id IN (
		SELECT 
			t2.id 
		FROM 
			links AS t2 
		WHERE 
			t.province = t2.province 
		LIMIT 5)
Pieter van Linschoten op 19/11/2010 13:52:55

Niet getest, maar een subquery op de eigen tabel zou de uitkomst kunnen bieden:


SELECT 
	t.* 
FROM 
	links AS t 
WHERE 
	t.id IN (
		SELECT 
			t2.id 
		FROM 
			links AS t2 
		WHERE 
			t.province = t2.province 
		LIMIT 5)



Nee, want mysql ondersteund geen limit, any, all in subquery....

Still waiting for the answer from Noppes.

Reageren