2013-05-26 4 views
5

Ho un array di stringhe e un tavolo con colonna di tipo text. Voglio elencare quale stringa quanti si sono verificati nella colonna specificata di qualsiasi riga nella tabella. C'è un modo per farlo con una query?Query per elencare quale stringa quanti si sono verificati in una tabella?

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 

risposta

0

Si può fare questo con una serie di like dichiarazioni.

Ecco un esempio:

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 

Questo non sta per essere particolarmente veloce se le tabelle sono di grandi dimensioni. Se disponi di tabelle più larghe, potresti prendere in considerazione l'indicizzazione di testo completo.

+0

Funziona tranne casi zero. C'è un modo per aggiungerlo anche tu? –

+0

@m_poorUser. . . Sì, è necessario un join esterno per quello (che richiede anche la modifica di 'count (*)' a 'count (id)'. –

+0

'count (totest.id)' dovrebbe essere 'count (t.id)'. funziona, grazie. –

0

Se le dimensioni della tabella non è troppo grande e la colonna è correttamente indicizzato:

SELECT 'test', COUNT(id) 
FROM tableName 
WHERE someTextColumn LIKE '%test%' 
UNION ALL 
SELECT 'sth', COUNT(id) 
FROM tableName 
WHERE someTextColumn LIKE '%sth%' 
+0

tavolo sarà di circa ha 100 righe, ma le stringhe può essere molto più di questo. Questa query funzionerà una volta alla settimana. Quindi se non c'è un modo migliore per farlo, posso usare questo. –

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); 

Prova questa Spero che questo possa risolvere ur problema !!

+0

Ho bisogno di sapere quale stringa quante volte si è verificato e non ci possono essere due stringa nella stessa cella, quindi questo non funziona per me. –

+0

Ok. Ora ho una migliore comprensione della tua domanda, cercherò di raddrizzare un'altra query per quel requisito. –

+0

Hai provato questa query? sta dando il conteggio dell'occorrenza assoluta di una stringa di array nella tua tabella. –

Problemi correlati