Toon posts:

Unieke numerieke database waarden in volgorde van aantal

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 26-07 10:50
Ik heb een database (mysql) tabel die een kolom bevat met nummerieke (zonder decimalen) waarden, gescheiden door komma's. Allereerst een voorbeeldje;

idcategories
15,3,8,10,11
25,10,11,3
38,10
410,11


Ik probeer in een php script de waardes van deze tabel uit te lezen, en vervolgens de unieke numerieke waardes in een array te zetten (of opnieuw in een comma seperated string), maar dan op volgorde van hoe vaak de numerieke waarde voorkomt in totaal. In dit geval zou dit dus moeten opleveren: 10,11,3,5,8

Ik puzzel al de hele dag en heb verschillende combinaties van MySQL queries en php programmeersels geprobeerd, maar kom er niet uit.

Allereerst heb ik geprobeerd alle unieke waarden via een query uit de database te trekken. Dat was op zich al complex:

code:
1
2
3
4
5
SELECT
GROUP_CONCAT(DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(category_id, ',', n.digit+1), ',', -1)) category_id
FROM restaurants
INNER JOIN (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3  UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(category_id, ',' , '')) <= LENGTH(category_id)-n.digit


Dit leidt tot 1 enkele string met alle numerieke unieke waarden, gescheiden door een komma. Echter, die staan nog niet op volgorde van aantal in totaal.

Daarna heb ik geprobeerd alle waarden uit de database te trekken in een array te plaatsen. Dan heb ik alle waarden, welliswaar nit nummeriek, maar zou ik in feite kunnen tellen hoe vaak elke waarde in die array voor komt middels en loop. Maar, dan nog mis ik de laatste stap; alles weer op volgorde van aantal zetten..

Hoop op jullie hulp in de juiste richting ;)

Alle reacties


  • Hydra
  • Registratie: September 2000
  • Laatst online: 08:42
Mexxus schreef op woensdag 23 oktober 2019 @ 16:48:
Hoop op jullie hulp in de juiste richting ;)
Normaliseer die waarden correct, dus niet dingen aan elkaar gaan lijmen met komma's, en het is een hele simpele query. Dit is een extreem goed voorbeeld van jezelf in de voet schieten door spullen slecht te normaliseren.

https://niels.nu


  • MaNDaRK
  • Registratie: Oktober 2001
  • Laatst online: 11:13

MaNDaRK

Android Fan

En mocht je het wel willen oplossen met deze database. Dan kan je alle resultaten in een array stoppen en dan de volgende functie er op loslaten: array_count_values, waarna je een sorteer functie er op los laat: sorting arrays en dan pak alleen de unieke waardes met array_unique

My bad, thanks @GlowMouse

[Voor 40% gewijzigd door MaNDaRK op 23-10-2019 22:52]

Online Backup Vergelijken? - Binair klokkijken


  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 11:19
Just my 💭

alle rows simpel ophalen uit database in een while of foreach door alle resultaten loopen.

Dan explode de kolom op comma, en die waardes in een nieuwe array zetten. En onder de loop een array_unique gebruiken.

Zoals @MaNDaRK al schreef dus, had zijn reactie nog niet gezien :+

[Voor 13% gewijzigd door CrazyFool op 23-10-2019 18:30]


  • GlowMouse
  • Registratie: November 2002
  • Niet online

GlowMouse

wees solidair

In de war met array_count_values?

geeft geen inhoudelijke reacties meer




Google Pixel 7 Sony WH-1000XM5 Apple iPhone 14 Samsung Galaxy Watch5, 44mm Sonic Frontiers Samsung Galaxy Z Fold4 Insta360 X3 Nintendo Switch Lite

Tweakers is samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer onderdeel van DPG Media B.V.
Alle rechten voorbehouden © 1998 - 2022 Hosting door True

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee