11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)
  • Q:
    Bijdrager
    Hans.

    Aantal keer dat iets in array voorkomt tellen en sorteren

    Hallo allemaal,

    Ik wil iets maken, dat als je je zoekresultaten doorloopt je boven de zoekresultaten ziet hoeveel zoekresultaten er per categorie zijn gevonden, en dat wil ik dan weer sorteren op het aantal, zodat de categorieën waarin het meest gevonden is boven komen te staan, heb nu dit:

    (Ik dump eerst alle categorieën v/d zoekresultaten in de array Categorieën)

    [code:1:6ac93fde8e]
    $aantal = array_count_values($Categorieën); //tel de dubbele en voeg ze in het array aantal in
    $Categorieën = array_unique($Categorieën); //Verwijder de dubbele entry’s in Categorieën
    $Categorieën = array_values($Categorieën); //herstel de sleutels

    $teller = 0;

    while($teller < count($Categorieën)){
    $array = $Categorieën[$teller];
    echo $array. => .$aantal[$array].<br>;
    $teller = $teller + 1;
    }
    [/code:1:6ac93fde8e]

    Ik krijg nu keurig een lijst met de subcategorieën en hoevaak er zoekresultaten in voorkomen, maar ik wil dat die lijst wordt gesorteerd op het aantal keer dat er een zoekresultaat voorkomt in een categorie. Dus ipv:

    Cat1 => 3
    Cat2 => 1
    Cat3 => 22

    Dit:

    Cat3 => 22
    Cat1 => 3
    Cat2 => 1

    Heel erg veel dank voor jullie hulp!

    Da Chicken

    Bijdrager
    computer space

    Moet het in PHP:
    http://nl2.php.net/manual/nl/function.sort.php
    Misschien zit hier iets bij.
    Wanneer het een MySQL query betreft kun je bijvoorbeeld op zo’n manier je query direct sorteren
    $sql = ‘SELECT * FROM database ORDER BY id DESC LIMIT 0 , 50’
    Nu sorteert ie de query op het veld ‘id’ aflopend en pakt ie de eerste 50 waarden.

    Bijdrager
    tennapel

    Kijk hier eens:
    http://nl2.php.net/manual/en/function.array-multisort.php

    De functie voor het sorteren van multidimensionele arrays in PHP.

    Misschien is het handiger om je query dusdanig aan te passen dat het gewenste resultaat eruit komt, dus je SQL al laten aggregeren en sorteren.

    Bijdrager
    Hans.

    In de query kan niet, want in de database staat niet hoeveel zoekresultaten er in één categorie zitten;)

    Multisort zou wel eens iets kunnen zijn, ga er eens naar kijken

    Bijdrager
    computer space

    Een query is een zoekopdracht en die kun je meteen laten tellen naar aantal voorkomens en hierop laten sorteren. Onderschat de mogelijkheden van mysql niet. Het is niet voor niets een krachtige database!

    Bijdrager
    Hans.

    Echt waar? Zou je in de query ook kunnen zetten dat hij dubbele kollommen eruit kan halen en tellen en sorteren? :? hoe dan?

    Bijdrager
    tennapel

    [code:1:2fee8a13b0]
    select
    a
    ,b
    ,count(*)
    from
    c
    group by
    a
    ,b
    order by
    count(*) desc
    [/code:1:2fee8a13b0]

    Bijdrager
    Hans.

    Tof, en dat sterretje betekend dan de dubbele, ik zou eerder denken dat dat alles betekend, maar dit is ook heel handig, maar heb nu iets gedaan met php dat ook werkt, als jullie echt iets goeds vervangends kunnen maken, dan graag, maar ik heb liever dat er maar 1 query wordt uitgevoerd qua vragen naar rijen, maar ik wist niet dat je zoveel met een query kon doen :lol:

    Bijdrager
    tennapel
    ”Da

    Tof, en dat sterretje betekend dan de dubbele, ik zou eerder denken dat dat alles betekend (…)

    Nee. count(*) betekent tel al records in de resultset en group by a,b zorgt ervoor dat alle dubbele rijen (voor combinaties van a en b) eruit vallen.

    Bijdrager
    Hans.

    en in welke string word dat count dan opgeslagen?

    Bijdrager
    Hans.

    doe het nu zo:
    [code:1:e410541cac]
    $aantal= array_count_values($categorieën); //tel de (dubbele) arrays
    $categorieën = array_unique($categorieën); //verwijder de dubbele arrays
    $categorieën = array_values($categorieën); //herstel de sleutels

    $teller = 0; //zet de teller op 0

    while($teller < count($subcategorieën)){
    $array = $subcategorieën[$teller];
    $tel[$teller] = $aantal[$array]."/".$array; //dump alles in een array om het later te sorteren
    $teller = $teller + 1;
    }

    rsort($tel,SORT_NUMERIC); //sorteer de array

    $teller = 0;//zet de teller op 0

    while($teller < count($subcategorieën)){
    $uiteindelijk = explode(’/’, $tel[$teller], 2); //haal de array uit elkaar
    echo $uiteindelijk[0].$uiteindelijk[1]."<br>n";
    $teller = $teller + 1;
    }
    [/code:1:e410541cac]

    Het zal wel een omweg zijn als het makkelijk kan in een query, maar het werkt… ik kon ff niks anders verzinnen…

11 berichten aan het bekijken - 1 tot 11 (van in totaal 11)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.