Unieke numerieke database waarden in volgorde van aantal

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Mexxus
  • Registratie: Januari 2004
  • Laatst online: 10-04 15:54
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


Acties:
  • +3 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
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


Acties:
  • 0 Henk 'm!

  • MaNDaRK
  • Registratie: Oktober 2001
  • Laatst online: 16-09 17:06
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 ]


Acties:
  • 0 Henk 'm!

  • CrazyFool
  • Registratie: Januari 2004
  • Laatst online: 20:08
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 ]


Acties:
  • +1 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
In de war met array_count_values?