Функция COUNT() в SQL
Функция COUNT() подсчитывает количество строк в таблице. Например:
Здесь мы подсчитываем и возвращаем количество строк в таблице Customers.

Использование псевдонимов с функцией COUNT()
В примере выше на выходе мы получили столбец с именем COUNT(*) . Мы можем изменить его название с помощью оператора AS. Например:
Теперь у нас есть столбец total_customers вместо COUNT(*) .

Функция COUNT() с оператором WHERE
Рассмотрим пример использования функции COUNT() с оператором WHERE:
Здесь мы выводим количество клиентов из Великобритании (UK).

Функция COUNT() с оператором DISTINCT
Если нам нужно подсчитать количество уникальных строк (без дублей), то мы можем использовать функцию COUNT() с оператором DISTINCT. Например:
Здесь мы выводим количество уникальных стран.

Функция COUNT() с оператором GROUP BY
Функция COUNT() может использоваться с оператором GROUP BY для подсчета строк с похожими значениями. Например:
Здесь мы подсчитываем и выводим количество клиентов в каждой стране.

Функция COUNT() с оператором HAVING
Рассмотрим пример использования функции COUNT() с оператором HAVING:
Здесь мы подсчитываем количество клиентов, группируя их по странам (country), а затем выводим, если в каждой стране их насчитывается больше 1.
Функция COUNT() со значениями NULL
SELECT COUNT(*) возвращает количество всех строк, независимо от значений NULL (т.е. вместе с ними).
SELECT COUNT(attribute) возвращает количество строк, содержащих ненулевые значения в указанном столбце.
GETTING THE NUMBER OF MYSQL ROWS IN ONE TABLE
To get the number of rows per table, you use the COUNT(*) operator in SELECT as follows:
SELECT
COUNT(*)
FROM
table_name;
For example, to get the number of rows in the andreyex table in a database example, use the following operator:
SELECT
COUNT(*)
FROM
andrex;
GETTING THE NUMBER OF MYSQL ROWS IN TWO OR MORE TABLES
To get the number of rows in several tables, you use the UNION operator to combine sets of results returned by each individual SELECT operator.
For example, to get the number of rows in a table and the number of rows in a single query, use the following instructions.
SELECT
'andrex' tablename,
COUNT(*) rows
FROM
andrex
UNION
SELECT
"trainings" tablename,
COUNT(*) rows
FROM
I'm sorry;
| andrex | 34 |
| | 451 |
2 rows in set (0.01 sec)
GETTING THE NUMBER OF MYSQL ROWS OF ALL TABLES IN A PARTICULAR DATABASE
To get the number of rows of all tables in a particular database, such as classicmodels, you use the following steps:
- First, get all table names in the database
- Second, create a SQL statement that includes all SELECT COUNT(*) FROM table_name operators for all tables separated by UNION.
- Third, execute a SQL statement using the prepared statement
First, to get all the names of the database tables, you query the following from the information_schema database:
SELECT
table_name
FROM
information_schema.tables
WHERE
table_schema = 'classicmodels'
AND table_type = 'BASE TABLE';
Second, to build the SQL operator, we use GROUP_CONCAT and CONCAT functions as follows:
SELECT
CONCAT(GROUP_CONCAT(CONCAT('SELECT \''',
table_name,
'\' table_name,COUNT(*) rows FROM ',
table_name)
' UNION '),
' ORDER BY table_name')
INTO @sql
FROM
table_list;
This query contains a list of table_list table names, which is the result of the query at the first stage.
The next query uses the first query as a derived table and returns the SQL instruction as a string.
SELECT
CONCAT(GROUP_CONCAT(CONCAT('SELECT \''',
table_name,
'\' table_name,COUNT(*) rows FROM ',
table_name)
' UNION '),
' ORDER BY table_name')
INTO @sql
FROM
(SELECT
table_name
FROM
information_schema.tables
WHERE
table_schema = 'classicmodels'
AND table_type = 'BASE TABLE') table_list
If you use MySQL 8.0+, you can use MySQL CTE (generic table expression) instead of a derived table:
WITH table_list AS (
SELECT
table_name
FROM information_schema.tables
WHERE table_schema = 'classicmodels' AND
table_type = 'BASE TABLE'
)
SELECT CONCAT(
GROUP_CONCAT(CONCAT("SELECT '",table_name," table_name,COUNT(*) rows FROM ",table_name) SEPARATOR " UNION "),
' ORDER BY table_name'.
)
INTO @sql
FROM table_list;
Third, you execute the @sql operator using the prepared operator as follows:
PREPARE s FROM @sql;
EXECUTE s;
DEALLOCATE PREPARE s;
GETTING THE NUMBER OF MYSQL ROWS OF ALL TABLES IN A DATABASE BY ONE QUERY
A quick way to get the number of rows of all tables in the database is to query data from the information_schema database directly:
SELECT
table_name,
table_rows
FROM
information_schema.tables
WHERE
table_schema = 'classicmodels'
ORDER BY table_name;
This method is sometimes not accurate because the number of rows in information_schema and the actual number of rows in tables are not synchronized. To avoid this, you must follow the ANALYZE TABLE instruction before requesting the number of rows in the information_schema database.
ANALYZE TABLE table_name. ;
In this article you learned about different ways to get the number of rows of one or more tables in a MySQL database.
Count table rows
What is the MySQL command to retrieve the count of records in a table?
![]()
12 Answers 12
will count the number of rows in the table.
Because nobody mentioned it:
lists all tables along with some additional information, including estimated rows for each table. This is what phpMyAdmin is using for its database page.
This information is available in MySQL 4, probably in MySQL 3.23 too — long time prior information schema database.
The number shown is estimated for InnoDB and TokuDB but it is absolutely correct for MyISAM and Aria (Maria) storage engines.
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.
This also is fastest way to see the row count on MySQL, because query like:
Doing full table scan what could be very expensive operation that might take hours on large high load server. It also increase disk I/O.
The same operation might block the table for inserts and updates — this happen only on exotic storage engines.
Определяем количество записей MySQL: пример кода

Функция COUNT() возвращает количество записей в таблице, соответствующих заданному критерию.
Функция COUNT(expr) всегда считает только те строки, у которых результатом выражения expr является NOT NULL .
Исключением из этого правила является использование функции COUNT() со звездочкой в качестве аргумента — COUNT(*) . В этом случае считаются все строки, вне зависимости от того, NULL они или NOT NULL .
Например, функция COUNT(*) возвращает общее количество записей в таблице:
Как посчитать количество записей и вывести на экран
Пример PHP+MySQL-кода для подсчета и вывода общего количества строк:
Этот пример иллюстрирует самый простой вариант использования функции COUNT() . Но с помощью этой функции можно выплнять и другие задачи.
Указав определенный столбец таблицы в виде параметра, функция COUNT(column_name) возвращает количество записей этого столбца, которые не содержат значение NULL . Записи со значениями NULL игнорируются.
Использовать функцию mysql_num_rows() нельзя, потому что для того, чтобы узнать общее количество записей, нужно выполнить запрос SELECT * FROM db , то есть получить все записи, а это нежелательно, поэтому предпочтительнее использовать функцию count .
Использование функции COUNT() на примере
Вот еще один пример использования функции COUNT() . Допустим, есть таблица ice_cream с каталогом мороженого, в которой находятся идентификаторы категорий и названия мороженого:
| id | name |
|---|---|
| 1 | «Пломбир № 1» |
| 1 | 100% мороженое |
| 1 | Эскимо № 1 |
| 2 | «Румба» |
| 2 | «Фрутсок» |
Задача: Нужно посчитать, сколько наименований мороженого содержится в каждой категории.
Решение этой задачи очевидно:
SELECT id, COUNT(*) FROM ice_cream GROUP BY id
Результат:
| id | count |
|---|---|
| 1 | 3 |
| 2 | 2 |
Если надо вывести населенный пункт и количество населенных пунктов в городе, то можно воспользоваться таким кодом:
Резюме
Соответственно, для решения более сложных задач в функцию COUNT() можно подставить выражение, возвращающее NULL или NOT NULL . Если строку нужно посчитать — выражение должно возвращать NOT NULL .

Считайте на здоровье 
А вот еще пример ребята, что бы вы не мучались. Так происходит подсчет сделок по обмену!
Ну да, здесь тот же запрос, только с условием WHERE . Так можно считать количество записей соответствующих определенному условию.
А как средствами MySQL найти максимальное количество строк с одинаковыми значениями? То-есть если брать таблицу (пример с мороженым) — что максимальное количество строк принадлежит ID=1 и равняется 3 ? Другими словами вытащить из COUNT GROUP BY максимальное значение с указанием на оное?
Есть таблица ORDER в которой отражаются заказы. В ORDER есть поле ITEM — наименование товара. Как одним запросом или вложенным запросом подсчитать какой товар заказывали больше всего? То есть узнать какое количество строк с одинаковым наименованием самое большое в таблице.
Задача казалось бы повседневная и элементарная для других СУБД.
В MySQL почему-то решения не нахожу. Напрашивается что-то типа COUNT(MAX(COUNT(‘item’) GROUP BY item)) , но говорят так нельзя.
Всем заранее спасибо!
Как обычно сам и отвечаю:
SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC;
На выходе получаем количество вхождений каждого ITEM в порядке убывания.
Сорри, что сразу не мог ответить. Вы сделали все правильно.
Если нужно получить максимальное значение группы, можно ограничить количество строк, выдаваемых командой SELECT . Для этого можно использовать выражение LIMIT с числовым аргументом:
SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC LIMIT 1;
SELECT item — это поле таблицы. В возвращаемом результате (а результатом будет таблица) поле будет иметь такое же имя.
COUNT(item) AS count
COUNT(item) — это результат вычисления. В возвращаемой таблице это поле будет безымянным, если не указать ему понятное имя, что и делается инструкцией AS count .
a AS b — в SQL значит «считать, что указаный объект/выражение a имеет имя b ».
Обычно пользуюсь таким:
Да, lukesky, клево. Спасибо за пример.
Если надо только посчитать количество записей, то использовать функцию mysql_num_rows наиболее оптимально.
Но если, кроме определения количества записей, данные необходимо еще обрабатывать, то придется делать новый запрос и тогда использовать данную функцию будет не целесообразно.
3.5.1 Максимальное значение столбца
«Как определить наибольшее значение в столбце?»
SELECT MAX(article) AS article FROM shop
3.5.2 Строка, содержащая максимальное значение некоторого столбца
«Как определить номер, дилера и цену самого дорогого изделия?»
В ANSI SQL (и MySQL 4.1) это легко делается при помощи вложенного запроса:
SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop)
В версиях MySQL до 4.1 такая задача выполняется в два этапа:
1. Следует получить максимальное значение цены из таблицы при помощи оператора SELECT.
2. Используя это значение, необходимо составить следующий запрос:
SELECT article, dealer, price
FROM shop
WHERE price=19.95
Существует еще одно решение: отсортировать все строки по убыванию цен и после этого получить первую строку, используя специальный оператор LIMIT:
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1
Примечание: если существует несколько самых дорогих изделий (например, каждое из них стоит 19,95), запрос, использующий LIMIT, возвращает лишь одно из них!
3.5.3 Максимальное значение столбца для группы
«Как определить наибольшую цену по каждому изделию?»
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article
Не обязательно вводить вторую переменную:
$result = mysql_query(«SELECT COUNT(*) FROM news»);
$result = mysql_num_rows($result);
У меня, ребята такой вопрос. Как организовать передачу переменной методом GET в джумле?
Я прописываю ссылку
index.php?option=com_content&view=article&id=13&Itemid=13?a=5 ,
пытаюсь передать а=5 в другую статью, но передача не происходит.
Это не связано с Джумлой. Вы допустили ошибку в синтаксисе передачи параметров метода GET.
index.php?option=com_content&view=article&id=13&Itemid=13 ? a=5
Вместо второго вопросительного знака нужно поставить амперсанд:
index.php?option=com_content&view=article&id=13&Itemid=13 & a=5
Спасибо за подсказку.
Пожалуйста 
Имеются строки с записями:
| `id` | `user_id` |
|---|---|
| 1 | 2 |
| 2 | 3 |
| 3 | 3 |
| 4 | 4 |
| 5 | 4 |
| 6 | 4 |
Почему-то у меня не считает количество строк
При таком выражении показывается значение `user_id` в первой строке, а надо посчитать именно количество сгруппированных записей
Почему так ни как не пойму? Можете подсказать, что здесь не правильно?
Пробовал и mysql_result($res, 0); но результат всегда один — 2 . хотя должно получится 3 .
Результат подсчета количества записей в каждой группе должен быть таким:
| user_id | количество записей |
|---|---|
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
Проблема с выводом данных. Дело в строке $row[0] . Ведь результатом будет не одна цифра, как вы ожидаете, а одна строка для каждой группы.
Для определения количества записей в каждой группе — запрос правильный
$res = mysql_query(«SELECT user_id, COUNT(*) FROM table GROUP BY user_id»);
COUNT(*) — считает сколько всего записей. В комбинации с GROUP BY идет подсчет записей в каждой группе, а не количество групп.
А как тогда посчитать количество групп?
А Вам что, собственно нужно? Если Вы хотите правильно вывести результаты запроса SELECT `user_id`, COUNT(*) FROM `table` GROUP BY `user_id` , то Вам нужно только поменять вот это:
Запрос совершенно верен и полностью решает первоначально поставленную задачу. Если же задача поменялась, пожалуйста, уточните ее.
Спасибо, badevlad. Всегда рад твоим компетентным и исчерпывающим ответам.
Наверно я не правильно объяснил первый раз, но у меня изначально стояла задача посчитать кол-во групп , а не кол-во записей в группе. Т.е. из условия должно получится три группы и результат должен быть 3.
Как пояснил fortresseo, данный запрос не подходит для решения, т. к. он выводит именно кол-во записей к каждой группе, а не кол-во групп.
И я не знаю как это сделать 
Вроде так в MySQL можно:
SELECT COUNT(DISTINCT user_id) FROM table
Или вот так, чуть сложнее:
SELECT COUNT(*) FROM (SELECT DISTINCT user_id FROM table) a
О_о. Кланяюсь Вам в ноги до пола alt=»:)» />
и огромное Вам спасибо. Оба запроса работают как часы. alt=»:)» />
Присоденяюсь с благодарностью за все подсказки Бадевлада в подсчете записей MySQL с уникальными значениями id.
Вы можете подсказать как вычислить разницу между датами в днях? Допустим есть дата начала и дата окончания проекта. Сколько дней занял проект?
Примерно вот так должно быть…
Подскажите пожалуйста! не знаю как решить… ничего не получается…
У меня на главной выводятся статьи. Пусть будет 3 статьи.
У каждой статьи есть ссылка на страничку с подробным описанием.
Пусть будет так: /articles-item.php?id=7&table=blogs_users
Так же есть страничка comments.php которая добавляет комментарии в отдельную таблицу. Comment .
В файле articles-item.php выводится подробная информация с комментариями. Комментарии достаем из таблицы по ID. то есть вытаскиваем все комментарии где Вопрос. Как мне на главной посчитать сколько комментариев у которых таблицы.
id post
1 7
2 7
3 4
4 2
5 7
6 4
Должен вывести. На главной возле каждой статьи должен показать сколько Комментов с таким же параметром что и ID Таблицы. если post =7 значит он относиться к таблице 7.
Очень помог код. Я использовал вариант с условием где название поля равнялось конкретному значению. Таким образом подсчитал кол-во записей с этим значением. Мне это было нужно, чтобы на сайте, в спец. предложения, нельзя было добавлять одинаковый товар дважды. Теперь всё ок.
Классно. Я очень рад, что вам это пригодилось.
Есть таблица в которой id (номер коммента), post (номер поста в котором размещается текст коммента), author , сам текст, дата и т. д.
Подскажите, пожалуйста, как подсчитать количество комментариев каждого пользователя?
SELECT COUNT(*) FROM таблица WHERE autor=’никнейм’
точнее:
SELECT COUNT(*) AS postuser FROM таблица WHERE autor=’никнейм’
и вот postuser и будет количество.
нужно посчитать количество одинаковых значений в каждом из двух столбцов, а потом вывести просто в цифрах
и сравнить эти два столбца
$per=(«Новочеркасский электровозостроительный завод»);
$per1=(«Луганский тепловозостроительный завод»);
$per2=(«Ишимский механический завод»);
$per3=(«Кандалакшский опытный машиностроительный»);
$per4=(«Коломенский завод»);
$per5=(«Пенза Дизельмаш»);
$per6=(«Завод им. Малышева»);
$per7=(«Волжский дизель»);
$per8=(«244»);
$per9=(«246»);
$per10=(«344»);
$per11=(«346»);
$per12=(«444»);
$per13=(«446»);
$res = mysql_query(«SELECT COUNT(*) FROM kniga_povrezhdenii_i_neispravnostey_lokomotivov where zavod=’$per’ or ‘$per1’ or ‘$per2’ or ‘$per3’ or ‘$per4’ or ‘$per5′»);
$row = mysql_fetch_array($res);
$total = $row[0]; // всего записей
$res2 = mysql_query(«SELECT COUNT(*) FROM kniga_povrezhdenii_i_neispravnostey_lokomotivov where Nremontnoi_brigad=’$per8′ or ‘$per9’ or ‘$per10′»);
$row2 = mysql_fetch_row($res2);
$total2 = $row2[0]; // всего записей
echo $total;
print(«»);
echo $total2;
print(«»);
if ($total>$total2) <
echo («zavod»);
> else
echo («brig»);
во втором запросе что то не так, потому что он выводит общее количество строк, а в первом как надо, повторяющиеся
Помогите пожалуйста сделать как у вас на сайте и на других вывод количества комментарий в статье (39 комментариев:)
Задача решена, извените за неудобстава.
Предположим что запрос SELECT id, COUNT(*) FROM ice_cream GROUP BY id используется с условием WHERE , например условием может являться наличие символа «№» в столбце name.
Тогда результат запроса будет
id count
1 2
А по идее необходимо, чтобы запрос выполнился с результатом
id count
1 2
2 0
т.е. в результате выполнения запроса нет нулевых значений. Как можно составить запрос, чтобы нулевые значения не отбрасывались
Статья взята из про. программирование на PHP, Дениса Колисниченко? 
Хе-хе, нет. Она писалась в живую. Потом дополнялась и дорабатывалась. В самом начале она состояла из одного примера. Мой друг, программист, Денис Балыкин спросил: «Почему только один пример?».
Спасибо большое этому сайту! здесь нашел много интерестного, наверно самое гланая особеность этого сайта в том что здесь все с примерами и подробным описанием! еще раз спасибо большое автору сайта
Пожалуйста. Если нравится, то нажимайте +1 и Лайк. Я буду за это благодарен.
Здравсвтуйте, помогите реализовать следующее:
есть одинаковые ряды с разным количеством повторов, среди них нужно показать те, количество повторов равно 2.
По жтому запросу «SELECT number, COUNT(number) AS count FROM tab_data GROUP BY number» получаю:
number count
2934234 28
2934235 5
2934236 42
2934238 2
2934239 3
2934240 2
2934247 2
2934248 2
2934249 2
2934250 2
2934251 9
2934252 2
2934253 2
2934256 3
А именно с count 2 не могу вытянуть.
Могу предложить только это:
// Делаем запрос
$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
$result = mysql_num_rows($query);
echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
for ($i=0; $i $v) <
// выбираем записи с count = 2
if ( $v[‘count’] == 2) <
// Тут нужное нам действие
echo $v[‘chan_id’].»»;
>
>
// Делаем запрос
$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
$result = mysql_num_rows($query);
echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
for ($i=0; $i $v) <
// выбираем записи с count = 2
if ( $v[‘count’] == 2) <
// Тут нужное нам действие
echo $v[‘chan_id’].»»;
>
>
// Делаем запрос
//$query = mysql_query(«SELECT chan_id, COUNT(chan_id) AS count FROM streams GROUP BY chan_id»);
// Выясняем кол-во записей
//$result = mysql_num_rows($query);
//echo «Количество записей: «.$result.»; «;
// Загоняем результат в массив
//for ($i=0; $i $v) <
// выбираем записи с count = 2
//if ( $v[‘count’] == 2) <
// Тут нужное нам действие
//echo $v[‘chan_id’].»»;
//>
//>
Пол кода при вставке стирается((( Админы, что за?
Здравствуйте!
Кажется, всё понятно после вашего урока, ан не получается, прошу помоши.
Есть три таблицы:
таблица разделов parts с полями: id | part (плодовые, овощи, ягоды …)
таблица категорий cats с полями: id | id_part | cat (яблоня, картофель, клубника…)
таблица статей data с полями: id | id_cat | text | остальные поля.
Естественно, `cats`.`id_part`=`parts`.`id` и `data`.`id_cat`=`cats`.`id`
Вот мой запрос, выводящий в меню разделы и категории, причем пустые категории он не выводит, это так и надо:
<?php
echo '’;
echo ‘‘.$myrow2[‘part’].’‘;
echo»;
$n = $myrow2[‘id’];
$result3 = mysql_query(«SELECT DISTINCT `cats`.id, `cats`.id_part, `cats`.cat FROM `cats` JOIN `data` ON `cats`.id = `data`.id_cat WHERE `cats`.id_part = ‘<$n>‘ GROUP BY `cats`.id «);//запрос категорий в соответствующем разделе
while($myrow3 = mysql_fetch_assoc($result3))
<
echo »;
echo ».$myrow3[‘cat’].’ (‘.$count.’)‘;
echo »;
>
?>
Пожалуйста, подскажите, как изменить запрос и получить переменную $count количества статей, соответствующих нужной категории.
Спасибо.
Вот какой вопрос.
SQL-запросы в visual foxpro. условие вывести количество изданий на карточке каждого читателя. объяснили так
SELECT CNT(num), name1+’ ‘+LEFT(name2,1)+’.’+LEFT(name3,1)
FROM fond, abonent
WHERE fond.num=abonent.num
GROUP by num,name1
не работает. запросы мы изучали мельком, потому сама не могу понять.
LOCAL cSQL, cKod
SELECT 2
cKod=ALLTRIM(STR(num))
cSQL=»SELECT COUNT(fond.num), abonent.name1+’ ‘+LEFT(abonent.name2,1)+’.’+LEFT(abonent.name3,1)+’.’ » + ;
» FROM base3!fond, base!abonent» + ;
» WHERE fond.num = abonent.num » + ;
» GROUP BY num, name1 »
WITH thisform.Grid2
.RecordSource=’ ‘
.RecordSource=cSQL
ENDWITH
Задача в SQL. Есть таблица с колонками UserID (имя юзера), TimeUsers (указывает время проведенное на сайте), Datetime (день в который юзер был на сайте), UserApp (устройство с которого заходил юзер). За один день юзер мог заходить на сайт несколько раз с разным временем прибывания.
Нужно вывести по каждому юзеру суммарное время за конкретный день и с кого устройства заходил юзер.
Спасибо!
Сначала вытаскиваем устройства конкретного юзера за день:
SELECT `UserApp` FROM `tablename` WHERE `UserID` = ‘нужное нам имя юзера’ AND `Datetime`= ‘нужная нам дата’
Далее суммируем время посещения:
SELECT `TimeUsers` FROM `tablename` WHERE `UserID` = ‘нужное нам имя юзера’ AND `Datetime`= ‘нужная нам дата’ GROUP BY `TimeUsers`
Здравствуйте!
Помогите решить следующую задачу.
имеется 2 таблицы:
id1 descript
1 descr1
2 descr2
3 desct3
id1 id2
1 1
1 2
2 3
2 4
2 5
Требуется составить запрос в SQL, который бы выводил
id1 descript count
1 descr1 2
2 descr2 3
count — количество включений id1 во 2-ю таблицу.
Здравствуйте. Завела в тупик следующая задача, помогите разобраться.
Есть 2 таблицы:
-posts [id, title, text]
-comments [comment_id, post_id, text, published]
Необходимо вывести все записи из таблицы post а так же количество опубликованных (т.е. published = TRUE) комментариев.
SELECT p.*, c.*, COUNT(*) AS `counts` FROM `posts` AS p, `comments` AS c WHERE c.published = 1 AND p.id = c.post_id GROUP BY c.post_id
Не советую пользоваться (published = TRUE) Лучше использовать числовые значения 0 , 1 типов INT или ENUM
всем пивет нужна помощь, есть таблица
id name_hotel zvezd
1 название1 5
2 название 2 4
3 название 3 5
нужно сделать чтобы считалось
5 звезд столько то ( тобишь чтоб вывелось 2)
4 звезды столько то (а здесь 1)
SELECT `zvezd`, COUNT(*) AS `counts` FROM `tablename` GROUP BY `zvezd`
Спасибо, смог вывести количество комментариев к материалу 
Таблица такая
lgid
18
18
7
18
7
7
12
12
как в массив вывести
18=>3
7=>3
12=>2
Поможете? Заранее спасибо
Спасибо. Четко, быстро и по смыслу.
Понадобился, так этот сниппет прямо скопировал, имя таблицы заменил и вывел себе в форме.
Я в ступоре с этим COUNT:
SELECT *, COUNT(`id`) AS `countid` FROM `material` WHERE `company` = ’23’ ORDER BY `id` DESC
COUNT считает хорошо, но склеивает записи
А мне хочется и все эти записи выбрать и вывести и их общее количество получить.
Пытался обмануть:
SELECT *, COUNT(`id`) AS `countid` FROM `material` WHERE `company` = ’23’ GROUP BY `id` ORDER BY `id` DESC
тогда напротив каждой записи единичка ))))
А нельзя чтоли просто посчитать кол-во выбранных записей?
$totalRows — кол-во записей. $list — массив с записями.
А можно и просто после выбора записей из базы просто посчитать их php функцией count():
$totalRows = count($list);
Это на скорую руку написал, можно и оптимизировать и упростить, но принцип такой)
Нет, просто не получится:
уж лучше использовать mysql_num_rows , чем $i++ , она тоже самое и делает, но по многочисленным нареканием на её медленность советуют использовать COUNT , который сразу дает ответ на вопрос о количестве выбранных записей без всяких $i++ , жрущие процессорное время совсем неэффективно.
Неужели если использовать COUNT , то прийдётся писать в два этапа: запрос данных + запрос количества полчаемых данных.
P.S.: принципы то я понимаю, если, 10 новостей на страницу вывести с пагинацией то и $i++ прокатит очень даже, а с несколькими тысячами записей хочется как-то пооптимальней.
Ну может тогда JOIN LEFT или что то вроде этого?
Здравствуйте.
Есть база «uchot», и таблица «pacient»
Id first_name last_name date
1 Степан Иванов 12/03/ 2014
2 Смирнов 12/03/2014
3 Вадим Попов 13/03/2014
4 Денис Новиков 14/03/2014
Как видно из таблицы в 2 строке не заполнен столбец «data_outcoming»
Нужно составить запрос к MYSQL
Вопрос:1. Как подсчитать количество строк у которых заполнен столбец » first_name»?
Вопрос: 2. Как подсчитать количество строк у которых незаполнен столбец » first_name»?
Вот структура базы
CREATE TABLE IF NOT EXISTS `patient` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Такой вариант не подходит!
$sql=’SELECT COUNT (*) as count FROM `pacient` WHERE `first_name`IS NULL’;
$res=mysql_query($sql);
$counts=mysql_fetch_assoc($res);
$count=$counts[‘count’];
echo ‘ ‘.$count.’ ‘;
Не заполнен:
SELECT COUNT (*) as count FROM pacient WHERE first_name = «»
Заполнен:
SELECT COUNT (*) as count FROM pacient WHERE first_name != «»
Поле first_name это строка (varchar) — по этому просто смотрим пустая она или нет…
Спасибо за ответ.
А как выводить число заполненных и не заполненных строк,
и как будет выглядить если строка не (varcher) а (data)?
как будет выглядить если строка не (varcher) а (data)? В смысле поле `date` из вашего примера?
Нет. Там «date» автозаполняемое поле, просто если там будет вводится дата?
Вот мой index.php
<?
include("config.php");
$sql='SELECT COUNT(*) FROM `pacient` WHERE `phone` IS NOT NULL';
$res=mysql_query($sql);
$counts=mysql_fetch_assoc($res);
$count=$counts['count'];
echo ''.$count.'';
$res = mysql_query(«SELECT * FROM `patient` ORDER BY `id`»);
while($patient = mysql_fetch_assoc($res)) <
$content .= ‘
И таблица
CREATE TABLE IF NOT EXISTS `patient` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`second_name` VARCHAR(255) NOT NULL,
`last_name` VARCHAR(255) NOT NULL,
`phone` VARCHAR(255) ,
`address` text NOT NULL,
`comment` text NOT NULL,
`date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Нужно выводить число не заполненых полей «phone» и заполненных полей «phone»
. По этому запросу ничего не выводить
Ну точно также:
// Не заполнен:
SELECT COUNT (*) as count FROM pacient WHERE phone = «»
// Заполнен:
SELECT COUNT (*) as count FROM pacient WHERE phone != «»
А дату так и подставляй:
SELECT * FROM pacient WHERE date == «2014-03-29 12:30:10»
гггг-мм-дд чч-мм-сс
Здравствуйте, такой вопрос, имеются три таблицы:
1) people (id, name, age, height) — название таблицы (столбцы в ней) — люди
2) cities (id, name) — города
3) visits (id, person_id, city_id, date) — посещения
person_id — внешний ключ к таблице people
city_id — внешний ключ к таблице cities
Вопрос заключается в следующем: нужно вычислить человека совершившего наибольшее кол-во поездок.
Нужно объединить таблицы и вычислить одним запросом, подскажите как?
Из выше приведенных комментариев использовал:
SELECT name, COUNT(person_id) AS count FROM `people`, `visits` GROUP BY person_id ORDER BY count DESC LIMIT 1;
Вроде бы эта команды работает, но она выдает странные результаты (в моем случае):
(name) Катя, (count) 1188
Это наврятли может быть верным, так как в visits всего 500 записей
По идее должно быть так:
SELECT p.name, COUNT(v.person_id) AS count FROM people AS p, visits AS v WHERE v.person_id = p.id ORDER BY count DESC
Здравствуйте, есть 2 таблицы users и uchet. Они связанны между собой по (users) id и (uchet) users_id. Как будет выглядеть запрос для вывода количества данных из таблицы uchet в котором поле «bolezn» равно «Грип» и соотвественно вывод всег юзеров из таблизы users у которых есть больезнь «грип»?
Очень просто:
SELECT u.id AS userid, u.*, uc.id AS uchetid, uc.* FROM users AS u, uchet AS uc WHERE uc.bolezn = ‘Грип’ AND u.id = uc.users_id
Суть еще в том, чтоб небыло одинаковых названий полей.
По идее должно быть так:
SELECT p.name, COUNT(v.person_id) AS count FROM people AS p, visits AS v WHERE v.person_id = p.id ORDER BY count DESC LIMIT 0, 1
Здравствуйте, Есть у меня база в каторой строка «date» формат DATE добавлаю туда дату с помощю
<input type="hidden" size="20" name="date" value="» />,
Дело втом что выводится дата типа 2014-09-01, как можно на этом примере конвертировать дату на 01-09-2014, буду благодарен за помощ.
Имеются 2 таблицы
CREATE TABLE IF NOT EXISTS `cw_users` (
`userid` int(25) NOT NULL AUTO_INCREMENT,
`first_name` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`last_name` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`email_address` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT »,
`username` varchar(25) CHARACTER SET utf8 NOT NULL DEFAULT »,
`password` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT »,
`info` varchar(50) CHARACTER SET utf8 NOT NULL,
`last_loggedin` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT ‘never’,
`user_level` enum(‘1′,’2′,’3′,’4′,’5’) CHARACTER SET utf8 NOT NULL DEFAULT ‘1’,
`forgot` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`status` enum(‘live’,’suspended’,’pending’) CHARACTER SET utf8 NOT NULL DEFAULT ‘live’,
PRIMARY KEY (`userid`)
)
CREATE TABLE IF NOT EXISTS `reception` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`patient_userid` int(11) NOT NULL,
`doctor_name` text NOT NULL,
`fill_date` date NOT NULL,
`send_place` text NOT NULL,
`cart` text NOT NULL,
`date_re_out_select` text NOT NULL,
`date_in` text NOT NULL,
`recomended` text NOT NULL,
`director_type` text NOT NULL,
`director_name` text NOT NULL,
`date` text NOT NULL,
PRIMARY KEY (`id`)
)
таблица `reception` связана с таблицей `cw_users` соотвественно по `patient_userid` и `userid`.
Юзер, зарегистрировавшийся в таблице cw_users может добавлять материалы в таблицу `reception`,
Задача создать запрос, чтобы вывелся список юзеров зарегистрированных в таблице `cw_users` и перед ними было бы КОЛИЧЕСТВО (число) материалов, которые они добавили в таблицу `reсeption`. Ни как не могу сформировать запрос, помогите пожалуйста конкретным примером.
SELECT userid, first_name, last_name, COUNT(id)
FROM cw_users
JOIN reception ON patient_userid = userid
GROUP BY id
Как-то так. Без проверки и гарантии работоспособности. Плюс я не знаю, так ли все это в MySQL.
Почти. Одна поправка:
SELECT userid, first_name, last_name, COUNT(id) as count
FROM test_cw_users
JOIN test_reception ON patient_userid = userid
GROUP BY patient_userid