Saya punya tabel seperti ini:
TITLE | DESCRIPTION
------------------------------------------------
test1 | value blah blah value
test2 | value test
test3 | test test test
test4 | valuevaluevaluevaluevalue
Saya mencoba mencari cara untuk mengembalikan berapa kali string muncul di masing-masing DESCRIPTION's.
Jadi, jika saya ingin menghitung berapa kali 'nilai' muncul, pernyataan sql akan mengembalikan ini:
TITLE | DESCRIPTION | COUNT
------------------------------------------------------------
test1 | value blah blah value | 2
test2 | value test | 1
test3 | test test test | 0
test4 | valuevaluevaluevaluevalue | 5
Apakah ada cara untuk melakukan ini? Saya tidak ingin menggunakan php sama sekali, hanya mysql.
CHAR_LENGTH()
alih-alihLENGTH()
jika Anda menggunakan karakter multibyte.Jawaban:
Ini harus melakukan trik:
sumber
LENGTH()
danCHAR_LENGTH()
sementara dibagi dengan byte / char penghitungan yang sama. @nicogawendaundevalue
adavalue
di dalamnya sehingga harus dihitung. Jika Anda hanya ingin menghitung kata-kata lengkap, mungkin Anda perlu mencari 'nilai' atau menulis sesuatu yang lebih rumit seperti menggunakan regex.LENGTH( REPLACE ( LOWER(description), "value", "") )
dan memastikan bahwa "nilai" selalu lebih rendah menggunakan PHPstrtolower()
. PS: Solusi ini di atas membantu saya untuk membangun mesin pencari kecil saya sendiri dan untuk menimbang hasilnya dengan jumlah kata dalam teks. Terima kasih!ROUND
sini tidak perlu. menganggap seutas panjangx
dengann
kemunculan'value
.LENGTH(description) - LENGTH( REPLACE ( description, "value", "") )
akan selalu memberi Andan*length("value")
, menyelam yang dengan panjang nilai akan selalu meninggalkan bilangan bulatn
. Tidak perlu dibulatkanVariasi solusi @yannis yang sedikit lebih sederhana dan lebih efektif:
Perbedaannya adalah bahwa saya mengganti string "value" dengan string pendek 1-char ("1234" dalam kasus ini). Dengan cara ini Anda tidak perlu membagi dan membulatkan untuk mendapatkan nilai integer.
Versi umum (berfungsi untuk setiap string jarum):
sumber
coba ini:
Demo SQL Fiddle
sumber
Dalam SQL SERVER, inilah jawabannya
Hasil
Saya tidak menginstal MySQL, tetapi goggled untuk menemukan Setara LEN adalah PANJANG sedangkan REPLACE sama.
Jadi kueri yang setara di MySql seharusnya
Tolong beri tahu saya jika itu berhasil untuk Anda di MySql juga.
sumber
Berikut adalah fungsi yang akan melakukannya.
sumber
Terima kasih Yannis, solusi Anda bekerja untuk saya dan di sini saya berbagi solusi yang sama untuk beberapa kata kunci dengan pesanan dan batas.
sumber
Ini adalah fungsi mysql menggunakan teknik ruang (diuji dengan mysql 5.0 + 5.5):
CREATE FUNCTION count_str( haystack TEXT, needle VARCHAR(32)) RETURNS INTEGER DETERMINISTIC RETURN LENGTH(haystack) - LENGTH( REPLACE ( haystack, needle, space(char_length(needle)-1)) );
sumber