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
---
---
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
но не гарантирую
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;
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` и все.
sergeiss, если исползовать ваш запрос, в результате получим число, которое показывает количество записей поля `text` и все.
Нет, получим именно то, что нужно

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
но все же попробуйте такой запрос:
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
вот такая строка выдает все раздвоения вместе с их значениями =)
и скрипт на пхп как их справить !!! У меня задвоились пароли или индентификаторы !!! собственно далее скрипт на пхп который правит данное положение =) можно придумать свои варианты !!!
/**
$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
_____________