[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Топ одинаковых значений
NeverMore
Допустим есть таблица
id text
1 привет
2 привет
3 пока
4 пока
5 привет-пока
6 привет-пока
7 привет-пока

Возможно ли только средствами MySQL вывести "топ значений по полю text" ?
привет-пока (3)
например
привет (2)
пока (2)




Спустя 12 минут, 38 секунд (10.07.2008 - 16:12) sergeiss написал(а):
Достаточно простой запрос это делает:
---
select text, count(text) as c from your_table
group by text
order by c desc
---

Спустя 2 дня, 22 часа, 36 минут, 23 секунды (13.07.2008 - 14:48) redow написал(а):
эм...
sergeiss, если исползовать ваш запрос, в результате получим число, которое показывает количество записей поля `text` и все.

NeverMore, насколько мне известно, максимальные значения только к числовым типам можно применить...
но все же попробуйте такой запрос:

SELECT MAX(text) as text from `table` ORDER BY `text` DESC LIMIT 0, 30

но не гарантирую

Спустя 2 часа, 12 минут, 55 секунд (13.07.2008 - 17:01) Viking написал(а):
да вроде все правильно sergeiss написал
SELECT text, COUNT(text) FROM table GROUP BY text ORDER BY COUNT(text) DESC;

Спустя 15 часов, 52 минуты, 50 секунд (14.07.2008 - 08:54) sergeiss написал(а):
Цитата(redow @ 13.7.2008, 15:48) [snapback]43286[/snapback]
эм...
sergeiss, если исползовать ваш запрос, в результате получим число, которое показывает количество записей поля `text` и все.

Нет, получим именно то, что нужно smile.gif
1. Сначала будут сгруппированы одинаковые значения поля text.
2. Затем внутри каждой группы будет найдено количество (а можно еще искать минимальное, максимальное, среднее значения....)
3. И будут выведены значения для каждой группы: текст и количество значений этого текста.

Собственно... Для того и нужно GROUP BY.

Цитата(redow @ 13.7.2008, 15:48) [snapback]43286[/snapback]
Насколько мне известно, максимальные значения только к числовым типам можно применить...
но все же попробуйте такой запрос:

SELECT MAX(text) as text from `table` ORDER BY `text` DESC LIMIT 0, 30

При выполнении этого запроса будет найдено одно значение (одна-единственная строка) поля text, которое будет максимальное - с учетом критериев сортировки текста. И не более того. И при этом ни ORDER BY, НИ LIMIT уже не нужны. Всё равно одну строку получим.

Кстати, в PosrgreSQL я проверил, MAX можно применять и к текстовому полю. Работает...

Спустя 1 год, 5 месяцев, 24 дня, 6 часов, 7 минут, 35 секунд (8.01.2010 - 16:02) Guest написал(а):
SELECT pass, COUNT(*) as cnt FROM oldcomp GROUP BY 1 ORDER BY 2 DESC

вот такая строка выдает все раздвоения вместе с их значениями =)

и скрипт на пхп как их справить !!! У меня задвоились пароли или индентификаторы !!! собственно далее скрипт на пхп который правит данное положение =) можно придумать свои варианты !!!

/**
$query="SELECT pass, COUNT(*) as cnt FROM oldcomp GROUP BY 1 ORDER BY 2 DESC"; if ($test=="1"){echo "Запрос к базе данных query ". $query. "<br>\n";}
$result=mysql_query($query);

$num_results=mysql_num_rows($result);
if ($test=="1"){echo "Переменная num_results =". $num_results. "<br>\n";}
for ($j=0;$j<$num_results;$j++){
if ($test=="1"){echo "<br><br>Строка ".$j."<br>\n";}
$row=mysql_fetch_array($result);
$cnt=htmlspecialchars(stripslashes($row['cnt'])); if ($test=="1"){echo "Значение cnt=". $cnt."<br>\n" ;}
$pass=htmlspecialchars(stripslashes($row['pass'])); if ($test=="1"){echo "Значение pass=". $pass ."<br>\n" ;}

if ($cnt==1) {$j=$num_results; if ($test=="1"){echo "Значение изменено j=". $j."<br>\n" ;} stop;}

$query2="SELECT * FROM oldcomp where pass='".$pass."'"; if ($test=="1"){echo "Запрос к базе данных query2 ". $query2. "<br>\n";}
$result2=mysql_query($query2);

$num_results2=mysql_num_rows($result2);
if ($test=="1"){echo "Переменная num_results2=". $num_results2. "<br>\n";}
for ($j2=0;$j2<$num_results2;$j2++){
if ($test=="1"){echo "<br>Строка ".$j2."<br>\n";}
$row2=mysql_fetch_array($result2);
$id2=htmlspecialchars(stripslashes($row2['id'])); if ($test=="1"){echo "Значение id2=". $id2 ."<br>\n" ;}
$pass2=htmlspecialchars(stripslashes($row2['pass'])); if ($test=="1"){echo "Значение pass2=". $pass2 ."<br>\n" ;}


$query3="update oldcomp set pass='".$pass2.$j2 ."' where id='".$id2."' limit 1";
if ($test=="1"){echo "Запрос к базе данных query3 ". $query3. "<br>\n";}
$result3=mysql_query($query3);


} // заканчивается цикл $j2

if ($test=="1"){echo "<br>Переходим к след значению <br>\n";}

} // заканчивается цикл $j1

if ($test=="1"){echo "<br>Всем спасибо все свободны <br>\n";}
**/

---------------
Администратор компьютерной барахолки www.oldcomp.ru


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.