X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> sql: посчитать количество одинаковых записей в таблице
Enforcer_hb
Enforcer_hb
Topic Starter сообщение 12.1.2012, 23:57; Ответить: Enforcer_hb
Сообщение #1


Всем здрасьте.

Есть таблица downloads.
В ней есть поле Filename.
Нужно: Вывести все имена файлов из этого поля, причем, чтобы дубликаты удалялись и рядом написать какое количество дубликатов найдено. То есть, сколько раз скачивали каждый файл (Filename).

Если вывести имена файлов и убрать дубликаты - знаю как, это не проблема, то подсчитать количество этих дубликатов + первый найденный файл - проблема.

Например:
first_file.mp3
first_file.mp3
first_file.mp3
second_file.mp3
second_file.mp3
third_file.mp3
third_file.mp3
third_file.mp3
third_file.mp3

Вывод:
first_file.mp3 - 3
second_file - 2
third_file - 4

Оформление не нужно, просто подскажите плиз как посчитать количество одинаковых имен в поле таблицы :)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Cristian
Cristian
сообщение 13.1.2012, 3:01; Ответить: Cristian
Сообщение #2


Сделать группировку по Filename и добавить count(*) как аргумент на выборку.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
adlic
adlic
сообщение 13.1.2012, 3:26; Ответить: adlic
Сообщение #3


[PHP]$res=mysql_query("SELECT * FROM `mytable`");
while($r=mysql_fetch_array($res)){
echo $r['filename'].": ".mysql_result(mysql_query("SELECT COUNT(*) FROM `mytable` WHERE `columnname`='". $r['filename'] ."'"),0,0);
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 13.1.2012, 10:50; Ответить: Apay
Сообщение #4


adlic, зачем городить такое? тем более запрос в цикле? это мягко говоря не совем назумно. Cristian же подсказал решение. все просто делается одним запросом
SELECT `filename`, COUNT(`filename`) AS cnt FROM `table` GROUP BY `filename`
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 13.1.2012, 10:58; Ответить: Mulder_hb
Сообщение #5


(adlic @ 13.1.2012, 06:26) *
$res=mysql_query("SELECT * FROM `mytable`");while($r=mysql_fetch_array($res)){*echo $r['filename'].": ".mysql_result(mysql_query("SELECT COUNT(*) FROM `mytable` WHERE `columnname`='". $r['filename'] ."'"),0,0);}

Никогда так не делайте. Похороните базу заживо. Делайте как сказал Cristian (в синтаксисе могу ошибаться):
SELECT COUNT(*), `filename` FROM `downloads` GROUP BY `filename` ORDER BY `filename`;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Enforcer_hb
Enforcer_hb
Topic Starter сообщение 13.1.2012, 11:19; Ответить: Enforcer_hb
Сообщение #6


Сделал так:

[PHP]
$link = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Could not connect to MySQL server!");
mysql_select_db($dbname, $link);


$query=mysql_query("SELECT `file`, COUNT(`file`) AS cnt FROM `downloads` GROUP BY `file`",$link);


echo "<caption style='font-size:13px; background:#FFFFCC;'>Отображается: статистика по скачиваниям файлов</caption>";
while ($row = mysql_fetch_array($query)){

echo "<tr style='background-color:#".($i?"ddedff":"f2f8ff")."'>
<td>".$row['file']." - ".$row['cnt']."</td>

</tr>";
}
[/PHP]

Все отлично работает.
Всем большое спасибо! ;)

Если можно еще, скажите как вывести с сортировкой не по имени файла, а по количеству.
То есть, чем больше количество скачиваний, тем выше место.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 13.1.2012, 12:02; Ответить: Mulder_hb
Сообщение #7


SELECT COUNT(*) AS cnt, `filename` FROM `downloads` GROUP BY `filename` ORDER BY `cnt` DESC;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Enforcer_hb
Enforcer_hb
Topic Starter сообщение 13.1.2012, 12:08; Ответить: Enforcer_hb
Сообщение #8


Mulder, спасибо!

Странно, вроде также писал и не работало. Видимо, ошибку где-то допустил в синтаксисе.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BOOMer_us
BOOMer_us
сообщение 30.10.2014, 12:26; Ответить: BOOMer_us
Сообщение #9


(Mulder_hb @ 13.1.2012, 15:02) *
SELECT COUNT(*) AS cnt, `filename` FROM `downloads` GROUP BY `filename` ORDER BY `cnt` DESC;


День добрый!
А есть ли какая нибудь возможность выполнить данный запрос и в результатах оставить лишь строчки, у которых cnt>1 (2 и более)?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 30.10.2014, 12:32; Ответить: Den1xxx
Сообщение #10


(BOOMer_us @ 30.10.2014, 14:26) *
в результатах оставить лишь строчки, у которых cnt>1 (2 и более)?

WHERE `cnt`>1
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Google adwords показывает дробное количество конверсий
0 Megaspryt 710 16.3.2024, 23:19
автор: Megaspryt
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыБаза товаров (opencart) SQL 70к+ товаров
Инструменты для дома, строительное и производственное оборудование
5 getdump 5607 1.9.2021, 2:04
автор: WebSniper
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыWeb-разработка (C++/PHP/SQL/JS/Bootstrap). HighLoad проекты.
0 DF™ 1420 28.7.2020, 13:24
автор: DF™
Открытая тема (нет новых ответов) Продам большое количество статей по низким ценам
Не веб-архив, читабельность, смысл и уникальность
15 ELECTROKATZE 16580 24.6.2020, 20:52
автор: NoMax
Открытая тема (нет новых ответов) Web программирование на С/С++/PHP/MySQL/SQL, высоконагруженные проекты
Есть наработки в области бирж трафика, топов, тизеров, видео cj-тубов
4 DFService 3336 8.4.2020, 18:02
автор: DFService


 



RSS Текстовая версия Сейчас: 29.3.2024, 0:20
Дизайн