login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[opgelost] Groeperen met GROUP BY

Offline Anoniem - 04/07/2006 19:50 (laatste wijziging 05/07/2006 12:44)
Avatar van AnoniemPHP gevorderde Als je met normaal met GROUP BY wilt sorteren, wordt er gegroepeerd op de opgegeven kolomnaam... Ik heb nu een 'ENUM' (jeweetwel: appel of banaan en niks anders...) kolomnaam met drie verschillende waardes die ik op een zelf opgegeven manier wil groeperen, is dat mogelijk met MySQL?

Ik bedoel zoiets:
  1. <?php
  2. mysql_query("SELECT `ip`, `reason`, `level` FROM `rvh_banned` GROUP BY `level` ON('high','medium','low') ORDER BY `id` DESC");
  3. ?>

15 antwoorden

Gesponsorde links
Offline Bart - 04/07/2006 19:56 (laatste wijziging 04/07/2006 19:57)
Avatar van Bart PHP expert
  1. <?php
  2. $array = array("high", "mid", "low");
  3. if(in_array($_GET['group_by']))
  4. {
  5. mysql_query("SELECT `ip`, `reason`, `level` FROM `rvh_banned` GROUP BY '".$_GET['group_by']."' ORDER BY `id` DESC");
  6. }
  7. else
  8. {
  9. echo 'Group_by manier niet ondersteund';
  10. }
  11. ?>

Hierbij moet je in de URL aangeven waar de group_by functie naar moet gaan kijken.
?group_by=high
?group_by=mid
?group_by=low
Offline Anoniem - 04/07/2006 19:59 (laatste wijziging 04/07/2006 20:01)
Avatar van Anoniem PHP gevorderde Bedankt voor de reactie, maar de resultaten moeten onderelkaar staan op een(1) pagina! En ik wil groeperen met devolgende volgorde:
`high`, `medium`, `low`. Want als je normaal groepeert wordt het:
`high`, `low`, `medium` of andersom als je DESC gebruikt.

Ow ja:
En bij jouw manier kan je net zo goed een WHERE clause gebruiken .
Offline Bart - 04/07/2006 20:01
Avatar van Bart PHP expert Dan geef je high, medium en low toch de een nummer prefix in de db?
Offline Anoniem - 04/07/2006 20:03
Avatar van Anoniem PHP gevorderde Ja dat kan inderdaad. (Daar heb ik zelf nog geneens aan gedacht)
Maar is er geen manier om te groeperen met zelf opgegeven waarden?
Offline Bart - 04/07/2006 20:04
Avatar van Bart PHP expert Dat weet ik zo niet, maar waarom zou je dat doen als je de oplossing (eigenlijk) al hebt. 
Offline Anoniem - 04/07/2006 20:07 (laatste wijziging 05/07/2006 12:07)
Avatar van Anoniem PHP gevorderde Het moet gewoon kunnen dus ik wil weten hoe dat moet. 

Edit:
Ik zou het ook kunnen doen met 3 queries met een where clause, omdat ik de drie verschillende waardes vooraf toch al weet, maar kan het gewoon niet in een query?
Offline Thomas - 05/07/2006 11:59
Avatar van Thomas Moderator 2 mogelijke oplossingen:
1. Maak een koppeltabel waar de levels op volgorde in staan, en sorteer dan (op- of aflopend) op id van deze koppeltabel.

2. Verplaats het sorteerprobleem naar PHP -> stop de resultaten in een array, en druk het gesorteerde array af.
Offline Anoniem - 05/07/2006 12:02
Avatar van Anoniem PHP gevorderde @FangorN
Bedank voor de reactie, ik zal de 1e oplossing maar gaan doen. Hopelijk komt datgene wat ik bedoel in de volgende mysql versie.
Offline Thomas - 05/07/2006 12:04 (laatste wijziging 05/07/2006 12:12)
Avatar van Thomas Moderator Ik begrijp wat je probeert te doen, maar ik denk dat je dit niet in de query zelf (zoals je het in het bovenste bericht hebt aangepakt) kunt regelen. Je zult dus was extra voorzieningen moeten treffen.

EDIT: Lol, blijkbaar begreep ik het toch niet helemaal. Je groepeert sowieso al op een kolomwaarde, dus hier hoef je geen extra voorzieningen voor te treffen. Maar vervolgens wil je de rijen in een bepaalde volgorde zetten. Dit is niet zozeer een GROUP BY probleem, maar een ORDER BY probleem, vandaar de verwarring .
Offline Anoniem - 05/07/2006 12:17 (laatste wijziging 05/07/2006 12:17)
Avatar van Anoniem PHP gevorderde Kan je dan groeperen met ORDER BY? Of begrijp ik nu jou niet?
Offline Bart - 05/07/2006 12:19
Avatar van Bart PHP expert Ja zeker, als je bijvoorbeeld van high naar low wilt sorteren doe je dit:
  1. <?php
  2. mysql_query("SELECT `ip`, `reason`, `level` FROM `rvh_banned` ORDER BY `high`, `medium`, `low` DESC");
  3. ?>
Offline marten - 05/07/2006 12:19
Avatar van marten Beheerder heb even een topic voor je geopend op de mysql forums

http://forums.m...msg-100643

Misschien dat daar nog een antwoord op komt 
Offline Anoniem - 05/07/2006 12:21
Avatar van Anoniem PHP gevorderde Bedankt, maar je moet er wel bijzetten dat je wilt groeperen met zelf opgegeven waarden.
Offline Thomas - 05/07/2006 12:21 (laatste wijziging 05/07/2006 12:24)
Avatar van Thomas Moderator Nee, maar je wilt ook helemaal niets groeperen toch? Je wilt alle rijen afdrukken, en wel in de volgorde "high", "medium", "low" (en misschien nog andere criteria, zoals aflopende volgorde van id.

Het kan overigens wel in 1 query, ik plaats deze hieronder zometeen.

@Quicky, dat zijn waarden van een kolom, dat zal dus niet werken lijkt me...

EDIT: ZO DAN!
  1. SELECT `ip`, `reason`, `level`, IF(`level` = 'high', 1, IF(`level` = 'medium', 2, 3)) AS custom_sort
  2. FROM `rvh_banned`
  3. ORDER BY custom_sort, `id` DESC
Offline Anoniem - 05/07/2006 12:25 (laatste wijziging 05/07/2006 12:29)
Avatar van Anoniem PHP gevorderde @FangorN
Bedankt, ik ga het gelijk even proberen!

Edit:
Het werkt! Heel erg bedankt iedereen voor het reageren.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.32s