2009-05-08 7 views
2

ich darüber immer gefragt haben, und jetzt ein Kunde fragt, ob es machbar ist:Bestellen einer MySQL Query von am häufigsten verwendeten Wörter in einem Feld

Ich habe eine Liste von Sportarten, wie so aufgeschlüsselt:

  • Jungen Eishockey
  • Jungen Tennis
  • Mädchen Eishockey
  • Mädchen Tennis

... etc

Und sie wollen es so sortieren:

  • Jungen Eishockey
  • Mädchen Eishockey
  • Jungen Tennis
  • Mädchen Tennis

... usw.

Ich frage mich nur, ob dies möglich ist, indem Sie einfach die Abfrage ändern. Leider kann ich nicht festlegen, dass die Sportarten nicht geschlechtsspezifisch sind und dass ihr Geschlecht als eigenes Feld festgelegt wird. Ich kann die Datenbank nicht in signifikanter Weise bearbeiten. Ich dachte, der beste Weg, um das Problem anzugehen, ist eine "die meisten Wörter in gemeinsamen" Abfrage, aber ich habe keine Ahnung, wie dies geschehen würde.

Vielen Dank im Voraus für jede Hilfe, die Sie Jungs bieten können!

UPDATE: Der Client endete die Anfrage fallen, aber ich hätte es wahrscheinlich als die angenommene Antwort näherte. Es ist immer noch keine völlig befriedigende Art, Dinge zu tun, aber ich bin mir nicht sicher, ob es eine "elegantere" Lösung in MySQL gibt.

Antwort

2

Können Sie etwas tun, wie

ORDER BY SUBSTRING(sport_name, 6), SUBSTRING(sport_name, 1, 5) 

in mysql, wenn alle Sportarten beginnen mit Jungen/Mädchen?

die Alternativ unten könnte besser sein, wenn der Raum als Trennzeichen verwendet wird:

ORDER BY SUBSTRING(sport_name, LOCATE(sport_name, ' ')), SUBSTRING_INDEX(sport_name, ' ', 1) 

Völlig ungetestet, wie ich dies vor haben versucht, und nicht eine MySQL-Instanz haben, es zu testen gegen

+0

Aktualisiert als ich die Länge und Startposition Parameter auf SUBSTRING verwechselt und Positionen von 1 beginnen glaube ich – Trotts

+0

Dies würde das Problem * im Allgemeinen * nicht lösen, würde es?:) – Tomalak

+0

Ja wie ich sagte Ich habe es nicht getestet und kann nicht atm, ich habe eine zweite Option drin, die etwas robuster sein könnte vorausgesetzt, es funktioniert :) – Trotts

3

"Die meisten gemeinsamen Wörter" wie im Vergleich die gemeinsamen Wörter in jeder Zeile mit der nächsten Zeile? Das wird in SQL ziemlich schwierig sein, da es schwierig ist, eine Abfrage zu erhalten, um verschiedene Zeilen miteinander zu vergleichen.

Sie könnten durch eine normativ CASE-Anweisung bestellen, aber es wird nicht schön sein:

 
... 
order by CASE sport_name 
    WHEN 'Boys Ice Hockey' THEN 1 
    WHEN 'Girls Ice Hockey' THEN 2 
    WHEN 'Boys Tennis' THEN 3 
    WHEN 'Girls Tennis' THEN 4 
    -- etc 
END CASE 
+0

+1 für der pragmatische Ansatz. Dies kann der einzige Weg sein, dies zu tun, mit einem vorhersehbaren Ergebnis und in begrenzter Zeit. – Tomalak

Verwandte Themen