[SQL] Laagste count waarde

  • Goedemiddag,


    Voor een privé project ben ik een soort 'load balancer' aan het maken tussen verschillende servers, dit kan dus in theorie verder uitgebreid worden zonder problemen.
    Nu ben ik aan het onderzoeken hoe ik mijn query het beste kan opzetten maar het heb tot nu toe alleen de COUNT() die mij exact verteld wat er aan aantallen is.


    Vraag:
    Kan deze query niet direct uitgevoerd worden zonder bijkomende PHP programmering, wil namelijk geen onnodige code schrijven als SQL dit ook kan.
    De bedoeling is dus om de laagste waarde terug te krijgen uit een combinatie van 2 queries, deze zien er als volgt uit:


    Hopelijk is het zo duidelijk, anders beantwoord ik de vragen via het onderwerp.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • uit een combinatie van 2 queries

    Dat zijn twee tabellen, niet twee queries.


    Kun je niet gewoon de COUNT een alias geven (COUNT(...) AS whatever) en vervolgens oplopend sorteren op dit resultaat en de resultaten limiteren tot 1 (ORDER BY whatever ASC LIMIT 1)?


    Kan het voorkomen dat de load van twee servers precies hetzelfde is?


    NB vergeet niet om GROUP BY te gebruiken eh.

  • @FangorN
    De bedoeling is om de minst volle server te vullen, zo wil ik dus gelijktijdig meerdere servers gebruiken tijdens het vullen.


    Server 1: 14 accounts
    Server 2: 10 accounts
    Server 3: 13 accounts
    Server 4: 0 accounts


    Nu wil ik met een simpele query dus server 4 aanvullen omdat deze het minst vol is, maar bij het toevoegen van nieuwe servers moet hij deze ook zien om de nieuwe server te vullen.


    Wil hiermee voorkomen dat servers leeg raken, ze moeten dus ten alle tijden gevuld worden. Via deze weg kan ik oneindig veel servers toevoegen omdat deze toch gevuld zullen worden.


    Ik had al iets met een COUNT(..) maar hierop krijg ik alle rijen terug, als ik deze limit naar 1 krijg ik niet de minst volle server. Nu is mijn query kennis niet geweldig te noemen dus sta open voor suggesties.

  • Zo ja, dan is dit je oplossing:

    SQL
    SELECT servers.id, COUNT(packages.id) as total_packages
    	FROM servers 
        LEFT JOIN packages 
        	ON servers.id = packages.server 
    	GROUP BY servers.id
        ORDER BY total DESC

    Dit geeft een lijst met het id van de server en het aantal packages van die server, gesorteerd op meest aantal packages als eerst.

  • Zo ja, dan is dit je oplossing:

    SQL
    SELECT servers.id, COUNT(packages.id) as total_packages
    	FROM servers 
        LEFT JOIN packages 
        	ON servers.id = packages.server 
    	GROUP BY servers.id
        ORDER BY total DESC

    Dit geeft een lijst met het id van de server en het aantal packages van die server, gesorteerd op meest aantal packages als eerst.

    Stond een kleine fout bij de ORDER BY maar dit werkt inderdaad, briljant heel erg bedankt voor je bijdrage!

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!