Hier arbeitet SQL Fiddle: http://sqlfiddle.com/#!9/0b0a0/32
ist mit zwei Tischen Lassen Sie beginnen - eine für Texte und eine für Zahlen:
CREATE TABLE text (`title` varchar(29));
INSERT INTO text
(`title`)
VALUES
('cheap cars for sale'),
('house for sale'),
('cats and dogs for sale'),
('iphones and androids for sale'),
('cheap phones for sale'),
('house furniture for sale')
;
CREATE TABLE iterator (`index` int);
INSERT INTO iterator
(`index`)
VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),
(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),(30)
;
Die zweite Tabelle enthält iterator
must Zahlen von 1 bis N, wobei N größer oder gleich der Länge der längsten Zeichenkette in text
.
Dann führen Sie diese Abfrage:
select
words.word, count(*) as `count`
from
(select
substring(concat(' ', t.title, ' '), i.index+1, j.index-i.index) as word
from
text as t, iterator as i, iterator as j
where
substring(concat(' ', t.title), i.index, 1) = ' '
and substring(concat(t.title, ' '), j.index, 1) = ' '
and i.index < j.index
) AS words
where
length(words.word) > 0
and words.word not like '% %'
group by words.word
order by `count` desc, words.word asc
Es gibt zwei wählt. Der äußere gruppiert und zählt einfach einzelne Wörter (Wörter mit einer Länge größer als 0 und ohne Leerzeichen). Inneres extrahiert alle Zeichenfolgen beginnend mit einem beliebigen Leerzeichen und endet mit einem beliebigen anderen Leerzeichen, so dass Zeichenfolgen keine Wörter sind (obwohl diese Unterabfrage words
genannt wird), da sie andere Leerzeichen enthalten können als das Starten und Beenden von eins.
Ergebnisse:
word count
for 6
sale 6
and 2
cheap 2
house 2
androids 1
cars 1
cats 1
dogs 1
furniture 1
iphones 1
phones 1
Ihre Frage ist sehr mehrdeutig. Bitte geben Sie Beispieldaten und gewünschte Ergebnisse an. –
mögliches Duplikat von [MySQL match() against() - nach Relevanz und Spalte sortieren?] (Http://stackoverflow.com/questions/6259647/mysql-match-against-order-by-relevance-and-column) Nicht ein genaues Duplikat, aber es beantwortet Ihre Frage – AgeDeO
@GordonLinoff aktualisiert – User