Ik heb een database (mysql) tabel die een kolom bevat met nummerieke (zonder decimalen) waarden, gescheiden door komma's. Allereerst een voorbeeldje;
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:
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
id | categories |
1 | 5,3,8,10,11 |
2 | 5,10,11,3 |
3 | 8,10 |
4 | 10,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