5

文字列の配列と、テキスト型の列を持つテーブルがあります。テーブルの任意の行の指定した列に、どの文字列がいくつ出現したかを一覧表示したい。1つのクエリでこれを行う方法はありますか?

Example;
$strings = array('test', 'sth');

Table;
id | someTextColumn
-------------------
1  | abc tests
2  | sthab
3  | teststh
4  | abcd
5  | sth

Expected result;
str  | occurences
-----------------
test | 2
sth  | 3
4

3 に答える 3

0
$query = "select someTextColumn, count(id) from tableName where "
for($i=0; $i < count($Strings); $i++)
{
   if($i != 0)
   $query .= " OR ";
   $query .= "someTextColumn =" . $string[$i];
}
$query .= " group by someTextColumn";

$result = mysql_query($query);

これを試してみてください。これで問題が解決することを願っています!!

于 2013-05-26T13:16:11.473 に答える
0

これは、一連のlikeステートメントで行うことができます。

次に例を示します。

select totest.str, count(t.id)
from (select 'test' as str union all
      select 'sth'
     ) totest left outer join
     t
     on t.someTextColumn like concat('%', totest.str, '%')
group by totest.str

テーブルが大きい場合、これは特に高速にはなりません。大きなテーブルがある場合は、フルテキスト インデックス作成を検討することをお勧めします。

于 2013-05-26T13:17:49.513 に答える
0

テーブルのサイズが大きすぎず、列が適切にインデックス化されている場合:

SELECT 'test', COUNT(id)
FROM tableName
WHERE someTextColumn LIKE '%test%'
UNION ALL
SELECT 'sth', COUNT(id)
FROM tableName
WHERE someTextColumn LIKE '%sth%'
于 2013-05-26T12:41:48.010 に答える