Dag VBIB'ers,
Ik hoop dat jullie me hiermee kunnen helpen.
Ik heb een tabel in een database met een tweetal relevante kolommen voor deze kwestie: 'aantal' en 'catid'.
Ik wil graag eerst de tabel desc sorteren op de waarde in 'aantal', vervolgens de eerste x aantal rijen pakken.
Vervolgens wil ik deze regels sorteren op 'catid', met eventuele second sort op 'aantal'.
Ik kom er tot nu toe nog niet echt uit. Zou iemand me hiermee kunnen helpen?
Groeten!
Thijs
![](http://www.vbib.be/public/style_images/master/icon_users.png)
![](http://www.vbib.be/uploads/profile/photo-1174.jpg?_r=1358339702)
Er zijn 6 reacties in dit onderwerp
#1
Geplaatst op 07 april 2015 - 19:46
#2
Geplaatst op 07 april 2015 - 19:56
Zoiets?
Code:
Deze haalt de eerste 10 resultaten op
Code:
SELECT * FROM tbl ORDER BY aantal DESC, catid ASC LIMIT 10
Deze haalt de eerste 10 resultaten op
#3
Geplaatst op 07 april 2015 - 20:19
Ja helemaal!
Ik ben veel te ingewikkeld aan het denken met JOIN functies enzo, bedankt!![;)](http://www.vbib.be/public/style_emoticons/default/wink.png)
Slotje
Ik ben veel te ingewikkeld aan het denken met JOIN functies enzo, bedankt!
![;)](http://www.vbib.be/public/style_emoticons/default/wink.png)
Slotje
#4
Geplaatst op 07 april 2015 - 23:25
Sorry, is'm toch nog niet!
Ik zal proberen even het probleem wat anders te verwoorden.
In een tabel gesorteerd op kolom 'aantal' pak ik de eerste, zeg, 10 rijen.
Vervolgens sorteer ik deze 10 rijen op kolom 'catid'. De tabel moet dus echt twee keer opnieuw worden gesorteerd.
De oplossing die je aandroeg nam inderdaad eerst de eerste tien, en sorteerde die op 'aantal', wanneer er twee regels waren met dezelfde waarde in 'aantal' werd er gesorteerd op 'catid'.
@Josk: je hebt de website gezien. Het is de bedoeling dat op de voorpagina van de aanvragen en aanbiedingen slechts de populairste x aantal items wordt getoont, zo dat ze op categorie zijn gesorteerd. Nu is het mogelijk dat een categorie twee keer voorkomt, ik denk dat je dat zelf hebt getest door 245234523452345 maal een talent maaien 2 toe te voegen ;p (ik krijg een mailtje voor ieder talent dat wordt toegevoegd haha). Dat is alleen niet de bedoeling. Dus stel het volgende:
Naam | aantal | catid
Adv 1 10 1
Adv 2 12 2
Adv 3 13 5
Adv 4 1 1
Adv 5 100 1
Adv 6 9 2
Als ik de populairste 4 items wil laten zien, moet het dus als volgt worden weergegeven, gesorteerd op [catid, aantal]
Cat 1
Adv 5
Adv 1
Cat 2
Adv 2
Cat 5
Adv 3
Kan iemand hier iets mee?
Groeten!
Thijs
Ik zal proberen even het probleem wat anders te verwoorden.
In een tabel gesorteerd op kolom 'aantal' pak ik de eerste, zeg, 10 rijen.
Vervolgens sorteer ik deze 10 rijen op kolom 'catid'. De tabel moet dus echt twee keer opnieuw worden gesorteerd.
De oplossing die je aandroeg nam inderdaad eerst de eerste tien, en sorteerde die op 'aantal', wanneer er twee regels waren met dezelfde waarde in 'aantal' werd er gesorteerd op 'catid'.
@Josk: je hebt de website gezien. Het is de bedoeling dat op de voorpagina van de aanvragen en aanbiedingen slechts de populairste x aantal items wordt getoont, zo dat ze op categorie zijn gesorteerd. Nu is het mogelijk dat een categorie twee keer voorkomt, ik denk dat je dat zelf hebt getest door 245234523452345 maal een talent maaien 2 toe te voegen ;p (ik krijg een mailtje voor ieder talent dat wordt toegevoegd haha). Dat is alleen niet de bedoeling. Dus stel het volgende:
Naam | aantal | catid
Adv 1 10 1
Adv 2 12 2
Adv 3 13 5
Adv 4 1 1
Adv 5 100 1
Adv 6 9 2
Als ik de populairste 4 items wil laten zien, moet het dus als volgt worden weergegeven, gesorteerd op [catid, aantal]
Cat 1
Adv 5
Adv 1
Cat 2
Adv 2
Cat 5
Adv 3
Kan iemand hier iets mee?
Groeten!
Thijs
#5
Geplaatst op 08 april 2015 - 09:06
Ik weet niet wat het beste gaat zijn tussen de opbouw doen van de categorieën in code, of specifiek je data in die volgorde laten terug komen uit je database.
Wat ik bedoel met in code, is dat je je layout opbouw met de categorieën in code laat gebeuren. Je selecteert dan de top 4 items ordered by aantal uit de database, en dan loop je over deze data en vul je een dictionary/collection op adh van de catId.
Gezien de php fout dat in het testen topic wordt vermeld, vermoed ik dus dat je werkt met php. Je zou dan een associative array kunnen opbouwen met de catId:
Code met de losse hand geschreven:
Code:
Wil je je data uit je database in dit formaat laten terugkomen, dan kan je dit op deze manier doen:
Code:
Dit is wel getest met een sql server database. Ik heb geen mysql of andere om op te testen op dit moment. Vermoedelijk ga je een mysql hebben waar bij je "limit" ipv "top" gaat moeten gebruiken.
Afhankelijk van hoe goed je hosting is van performantie en hoeveel drukte je verwacht op de website, ga je wel wat performantie testen moeten doen. Een loop in code is maar enkele cpu cycles, maar je moet er wel 2 doen (eentje om je data juist te zetten en eentje om ze te printen op het scherm) om het gedaan te krijgen. Data opvragen uit je database dmv subqueries is dan weer zeer intensief door het aantal scans en seeks dat er gaat gebeuren. Als je de performantie van dit wil, ga je een executionplan moeten laten genereren, maar hoe je dat specifiek bij mysql doet weet ik ook niet.
Tot slot: het maakt totaal niet uit welke methode je gebruikt als het weinig data is, weinig simultane bezoekers en een degelijke hosting.
Wat ik bedoel met in code, is dat je je layout opbouw met de categorieën in code laat gebeuren. Je selecteert dan de top 4 items ordered by aantal uit de database, en dan loop je over deze data en vul je een dictionary/collection op adh van de catId.
Gezien de php fout dat in het testen topic wordt vermeld, vermoed ik dus dat je werkt met php. Je zou dan een associative array kunnen opbouwen met de catId:
Code met de losse hand geschreven:
Code:
$result = array(); foreach (dbCollection as $item) { $result[$item->catId][] = $item; }Op deze manier hoef je dan daarna enkel nog te printen.
Wil je je data uit je database in dit formaat laten terugkomen, dan kan je dit op deze manier doen:
Code:
select * from (select top 4 * from tabel order by aantal desc) as tabel2 order by catid asc, aantal desc
Dit is wel getest met een sql server database. Ik heb geen mysql of andere om op te testen op dit moment. Vermoedelijk ga je een mysql hebben waar bij je "limit" ipv "top" gaat moeten gebruiken.
Afhankelijk van hoe goed je hosting is van performantie en hoeveel drukte je verwacht op de website, ga je wel wat performantie testen moeten doen. Een loop in code is maar enkele cpu cycles, maar je moet er wel 2 doen (eentje om je data juist te zetten en eentje om ze te printen op het scherm) om het gedaan te krijgen. Data opvragen uit je database dmv subqueries is dan weer zeer intensief door het aantal scans en seeks dat er gaat gebeuren. Als je de performantie van dit wil, ga je een executionplan moeten laten genereren, maar hoe je dat specifiek bij mysql doet weet ik ook niet.
Tot slot: het maakt totaal niet uit welke methode je gebruikt als het weinig data is, weinig simultane bezoekers en een degelijke hosting.
#6
Geplaatst op 08 april 2015 - 10:09
Bedankt voor je antwoord! Ga ik even mee aan de slag!
'k Werk inderdaad met PHP, had ik niet vermeld inderdaad.
Groeten!
'k Werk inderdaad met PHP, had ik niet vermeld inderdaad.
Groeten!
#7
Geplaatst op 08 april 2015 - 10:38
Yess ik geloof dat het werkt. Bedankt beide!
Ook met taq Solved voorzien
Solved
VBA (for applications) →
Microsoft Excel ® →
Formule Van Een Cel Met Goed Of Fout Beantwoorden?Begonnen door pascalbianca , 25 jun 2018 |
|
![]()
|
||
Solved
Andere programmeertalen →
PHP →
Fout In Sql En Weet Niet Wat.Begonnen door pascalbianca , 29 mrt 2016 |
|
![]()
|
||
Solved
Andere programmeertalen →
Java →
Xml Bestand Vanop Internet Uitlezen In Android StudioBegonnen door Prior , 10 jan 2015 |
|
![]()
|
||
Solved
VBIB Community →
Mededelingen →
SchoonheidsfoutjeBegonnen door doebi , 22 dec 2014 |
|
![]()
|
||
Solved
VBIB Community →
Fun-talk →
Windows Form Print Helper ComponentBegonnen door barremans , 21 dec 2014 |
|
![]()
|
0 gebruiker(s) lezen dit onderwerp
0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers