#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 Вау, отличный способ, я действительно ломал голову, пытаясь найти ответ, который был бы НАМНОГО сложнее 🙂 Приветствия