0

皆さん、簡単な質問です。これに似たmysql行に文字列があります

'google.co.nz, stackoverflow.com, facebook.com, grubber.co.nz'


など...テーブル内のすべての行を検索し、上記のようなすべての行に「facebook.com」が何回表示されるかを確認して明確にしたいと思います

私の行は次のようになります

-- id -- user -- likes 
   1      bob     facebook.com, google.co.nz, grubber.co.nz, stackoverflow.com

そして、facebook.comがテーブル全体(すべての行)に何回表示されるかを確認したいと思います

4

6 に答える 6

5

すべてのユーザーが同じページを1回だけ好きになると仮定すると、これは機能するはずです。

SELECT COUNT(*)
FROM table
WHERE likes REGEXP '[[:<:]]facebook.com[[:>:]]'

PS:テーブルを正規化すると、近い将来、このようなレイアウトで深刻な問題が発生します

于 2012-09-07T09:46:15.130 に答える
1

LIKE SQLクエリを発行して、怠惰な方法でそれを行うことができます:

SELECT count(*) FROM my_table 
WHERE my_table.likes LIKE '%facebook.com%'

これは本当に(本当に)CPUフレンドリーではありません。特に大きなテーブルでは

それ以外の場合は、MySQL フルテキスト インデックス機能を使用できます。

この記事で詳細を確認できます

于 2012-09-07T09:54:39.283 に答える
0

演算子を使用してlike、パターンを一致させることができます。

SELECT COUNT(id) AS occurences  WHERE likes LIKE "%facebook.com%"
于 2012-09-07T09:47:08.810 に答える
0

「LIKE」ステートメントを使用できます。これは次のようになります(どのユーザーがfacebook.comを気に入っているかを知りたい場合)

SELECT * FROM yourtable
WHERE likes LIKE '%facebook.com%'

とにかく、文字列としてではなく、1:nのテーブル構造にいいねを保存することを検討してください

これにより、すべてのいいねサイトを格納するテーブル、ユーザーテーブル、および割り当てを格納するユーザーいいねテーブルができます。

于 2012-09-07T09:47:30.293 に答える
0

これを試して

select count(likes) from yourTable where likes like '%facebook.com%'
于 2012-09-07T09:48:07.907 に答える
0

その他のオプション。変数の行データを取得してから、関数preg_match_all(http://www.php.net/manual/es/function.preg-match-all.php)を使用します。

この関数は、最初のパラメーターで渡された正規表現の出現回数を返します。

于 2012-09-07T09:48:20.917 に答える