получить два верхних (среза?) в field1 из explode и подсчитать в field2

#php #explode #slice

#php #explode #фрагмент

Вопрос:

 myTable

field1    |   field2
------------------------
47       |    46,43,22,88,99,12
22       |    12,99
88       |    77
12       |    99,22,84,5
  

Используя PHP, я хочу извлечь из моей базы данных (Mysql 5.x) 2 значения из field1, которые имеют наибольшее количество значений в field2. это для Joomla / JomSocial, если это имеет значение, но любой ответ очень ценится.

 The out put of the following query should be
Top Member ID = 47
Top Member ID = 12
  

Я пробовал это, но ничего не произошло:

     $query  =   'SELECT * FROM myTable;

    $db->setQuery( $query );
    $row = $db->loadObjectList();        
    $counted = array_count_values($row[field2]);
    arsort($counted);
    $top_two = array_slice($counted, 0, 2);
    foreach ( $top_two as $data )
        {
            echo "Top Member ID = " . $data ."<BR />";
        } 
  

Большое вам спасибо

Ответ №1:

Вы можете сделать это в прямом SQL:

 SELECT field1, field2, LENGTH(field2)-LENGTH(REPLACE(field2,',','')) AS num FROM myTABLE ORDER BY num DESC LIMIT 2;
  

Возвращенные 2 строки будут теми, которые вы хотите.

Комментарии:

1. Вау, вы, ребята, быстро кричите…. Я думаю, мне нравится этот форум. Сейчас собираюсь подключить его к моему скрипту и попробовать … спасибо!

2. ctcherry, подсчет количества элементов в field2 или длины строки?

3. Ах … считая запятые. Хорошая идея.

4. @user1006292: подсчитывается количество запятых. Возьмите длину всей строки (например 1,2,3,4 = 7 ), затем вычтите длину строки при замене запятых на » (например, `1234 = 4′)… таким образом, это даст вам 3. 3 — это не количество элементов, но оно непротиворечиво, поэтому порядок по будет в порядке.

5. @ctcherry Вау, отличный способ, я действительно ломал голову, пытаясь найти ответ, который был бы НАМНОГО сложнее 🙂 Приветствия