Sie eine andere Tabelle/Beziehung haben Angenommen user_skills darstellen, die (zum Beispiel) enthält user_id und skill_id Fremdschlüssel, dann würden Sie diese auf die beitreten wollen Skill-Tabelle und gruppieren Sie die Ergebnisse ähnlich wie folgt:
select name, count(skill_id) as ranking
from skills join user_skills on skills.id = user_skills.skill_id
group by name
order by count(skill_id) desc, name asc;
Es enthält Fähigkeiten, die von keinem Benutzer ausgewählt wurden. Wenn Sie diese ebenfalls einschließen möchten, ändern Sie den Join auf einen linken Join.
Edit: Mit der ursprünglichen Frage aktualisiert, um die Definition der Tabelle Benutzer enthalten, dann würde dies vielleicht ausreichen. Wiederum würden Sie eine linke Verknüpfung benötigen, um Fähigkeiten einzuschließen, die kein Benutzer ausgewählt hat.
select skills.name, count(users.id) as qty
from skills join users
on locate(concat(',', skills.id, ','), concat(',', users.skills, ',')) > 0
group by skills.name
order by count(users.id) desc, skills.name asc;
Wo ist deine andere Tabelle? Zeig es uns bitte. – Blank
Von den von Ihnen bereitgestellten Informationen würde ich sagen, dass Ihre Datenbankstruktur ein Problem ist. Vielleicht möchten Sie eine separate Tabelle für 'skills',' user' und 'users_skills' verwenden, um sie zu verbinden. Wenn Sie Skills nur als kommagetrennte Werte speichern, müssen Sie jedes Mal über ALLE Benutzer iterieren, wenn Sie die Gesamtanzahl erhalten möchten. – cybrox
Verbinden Sie beide Tabellen, wenn Sie Daten erhalten, und verwenden Sie dann explodieren. – Bhavin