2016-02-16 13 views
5

moje tagi tabeliPotrzebujesz najbardziej popularnej wartości oddzielonej przecinkami mysql?

| id | tags   
| --- | ------------ 
| 1 | css,html,php 
| 2 | php,java,css  
| 3 | java,c++,ios 

muszą się umieścić jak

| tags | tags   
| --- | ------------ 
| css | 2 
| php | 2  
| java | 1 
| html | 1 
| c++ | 1 
| ios | 1 
+0

http://php.net/manual/en/function.array-count-values.php – rahul

+0

normalizacji bazy danych, aby uniknąć przechowywania oddzielonych przecinkami wartości i zapobiegać złożoność . –

+1

Gdybym był * tam *, nie zacznę od * tutaj * – Strawberry

Odpowiedz

2

Nie wiesz, co rozszerzenie DB używasz. Możesz spróbować tego -

// Fetch the data by executing- 
"SELEC GROUP_CONCAT(tags) tags FROM my_tags"; 

// Then explode them 
$tags = $row['tags']; 
$tags_array= explode(',', $tags); 

//Count the values 
$counts = array_count_values($tags_array); 

// Sort 
$counts = arsort($counts); 

To jest jak algorytm. Wprowadź go za pomocą kodu.

1

Spróbuj tego .. Mam nadzieję, że pomoże.

SELECT  `value`, 
      COUNT(`value`) AS `value_occurrence` 
    FROM  `my_table` 
    GROUP BY `value` 
    ORDER BY `value_occurrence` DESC 
    LIMIT 1; 
+0

To nie pomoże, ponieważ 'tagi' mają różne wartości. Tak więc "COUNT" ma wartość "1" dla wszystkich wartości. –

+0

Aby uzyskać listę wartości i liczbę ich występów: Spróbuj. wybierz col_name, policz (col_name) c z tabeli group by col_name order by c desc; –

+1

Sprawdź to http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set –

1

To może pomóc: select group_concat(tags) from tags group by tag;

Powiązane problemy