Содержание
Функция COUNT()
Функция COUNT()
возвращает количество записей в таблице, соответствующих заданному критерию.
Функция COUNT(expr)
всегда считает только те строки, у которых результатом выражения expr
является NOT NULL
.
Исключением из этого правила является использование функции COUNT()
со звездочкой в качестве аргумента — COUNT(*)
. В этом случае считаются все строки, вне зависимости от того, NULL
они или NOT NULL
.
Например, функция COUNT(*)
возвращает общее количество записей в таблице:
SELECT COUNT(*) FROM table_name
Как посчитать количество записей и вывести на экран
Пример PHP+MySQL-кода для подсчета и вывода общего количества строк:
<?php> $res = mysql_query("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row($res); $total = $row[0]; // всего записей echo $total; ?>
Этот пример иллюстрирует самый простой вариант использования функции COUNT()
. Но с помощью этой функции можно выплнять и другие задачи.
Указав определенный столбец таблицы в виде параметра, функция COUNT(column_name)
возвращает количество записей этого столбца, которые не содержат значение NULL
. Записи со значениями NULL
игнорируются.
SELECT COUNT(column_name) FROM table_name
Использовать функцию mysql_num_rows()
нельзя, потому что для того, чтобы узнать общее количество записей, нужно выполнить запрос SELECT * FROM db
, то есть получить все записи, а это нежелательно, поэтому предпочтительнее использовать функцию count
.
$result = mysql_query("SELECT COUNT (*) as rec FROM db");
Использование функции 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 |
Если надо вывести населенный пункт и количество населенных пунктов в городе, то можно воспользоваться таким кодом:
SELECT tab1.subcity,COUNT(tab2.city) FROM tab1 LEFT JOIN tab2 ON tab1.subsity = tab2.subcity
Резюме
Соответственно, для решения более сложных задач в функцию 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
+———+
| article |
+———+
| 4 |
+———+
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
+———+——-+
| article | price |
+———+——-+
| 0001 | 3.99 |
| 0002 | 10.99 |
| 0003 | 1.69 |
| 0004 | 19.95 |
+———+——-+
Не обязательно вводить вторую переменную:
$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
Спасибо за подсказку!!!
Пожалуйста
Имеются строки с записями:
Почему-то у меня не считает количество строк
При таком выражении показывается значение
`user_id`
в первой строке, а надо посчитать именно количество сгруппированных записейПочему так ни как не пойму? Можете подсказать, что здесь не правильно?
Пробовал и
mysql_result($res, 0);
но результат всегда один —2
. хотя должно получится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
О_о. Кланяюсь Вам в ноги до пола
и огромное Вам спасибо. Оба запроса работают как часы.
Присоденяюсь с благодарностью за все подсказки Бадевлада в подсчете записей MySQL с уникальными значениями id.
Вы можете подсказать как вычислить разницу между датами в днях? Допустим есть дата начала и дата окончания проекта. Сколько дней занял проект?
Примерно вот так должно быть…
Подскажите пожалуйста! не знаю как решить… ничего не получается…
У меня на главной выводятся статьи. Пусть будет 3 статьи.
У каждой статьи есть ссылка на страничку с подробным описанием.
Пусть будет так: /articles-item.php?id=7&table=blogs_users
Так же есть страничка comments.php которая добавляет комментарии в отдельную таблицу. Comment .
В файле articles-item.php выводится подробная информация с комментариями. Комментарии достаем из таблицы по ID. то есть вытаскиваем все комментарии где ID = 7.. Вопрос. Как мне на главной посчитать сколько комментариев у которых 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);
Это на скорую руку написал, можно и оптимизировать и упростить, но принцип такой)
Спасибо, JeroniMMo.
Нет, просто не получится:
уж лучше использовать
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.'';
$content = '
Список пациентов
Список пациентов
#
Телефон
ФИО
‘;
$res = mysql_query(«SELECT * FROM `patient` ORDER BY `id`»);
while($patient = mysql_fetch_assoc($res)) {
$content .= ‘
‘.$patient[«id»].’
‘.$patient[«phone»].’
‘.$patient[«last_name»].’ ‘.$patient[«name»].’ ‘.$patient[«second_name»].’
РедактироватьУдалить
История посещений
‘;
}
$content .= ‘
‘;
echo $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="» />,
и вывожу из базы
$res = mysql_query(«SELECT * FROM `patient` WHERE `id`=».$_REQUEST[«id»].» «);
if($row = mysql_fetch_assoc($res)) {
$content .= ‘
‘.$row[«date»].’
‘;
}
echo $content;
?>
Дело втом что выводится дата типа 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
Заместо
GROUP BY id
нужноGROUP BY patient_userid
Спасибо, JeroniMMo.
а как вывести имена юзеров и число материалов для каждого юзера. я представил структуру таблицы?
Ну так то, что выше — это и есть вывод имени и кол-во записей.
userid
— id пользователяfirst_name
— Имяlast_name
— Фамилияcount
— Кол-во материаловИли я не понял вопрос…
Вот после этого кода как должен выглядеть код вывода?
SELECT userid, first_name, last_name, COUNT(id) as count
FROM cw_users
JOIN reception ON patient_userid = userid
GROUP BY patient_userid
Ну дальше основами php. Через циклы. for, foreach.php.su
Объяснять не буду. Ищи на
Может сделаете исключение?
Скрипт ничего не выводит!!!
вот скрипт (с количеством пока не разобрался), ничего не выводит
<?
$content = '
Список
Список
#
ФИО
';
$db = mysql_connect ("localhost","root","");
mysql_select_db ("new", $db);
$res = mysql_query("SELECT `userid`, `first_name`, `last_name`, COUNT(id) as count
FROM `cw_users`
JOIN `reception` ON `patient_userid` = `userid`
GROUP BY `patient_userid`");
while($patient = mysql_fetch_assoc($res)) {
$content .= '
'.$patient["id"].'
'.$patient["last_name"].' '.$patient["first_name"].'
';
}
$content .= '
';
echo $content;
?>
$select = "SELECT userid, first_name, last_name, COUNT(id) as count
FROM test_cw_users
LEFT JOIN test_reception ON patient_userid = userid
GROUP BY patient_userid ORDER BY userid ASC";
$content = '-ID- ФИО (КОЛ-ВО)';
$db = mysql_connect ("localhost","root","");
mysql_select_db ("new", $db);
$res = mysql_query($select);
while($patient = mysql_fetch_assoc($res)) {
$content .= '-'.$patient["userid"].'- '.$patient["last_name"].' '.$patient["first_name"].' ('.$patient["count"].')';
}
$content .= '';
echo $content;
У меня вот так работает…
Разобрался. Дело все в том, что у Вас дублируются поля, т.е. в таблице cw_users есть поля first_name, last_name и в reception они тоже есть. Из-за этого возникает конфликт в запросе, если напрямую не указать принадлежность полей.
Вот новый запрос, который точно работает:
SELECT test_cw_users.userid, test_cw_users.first_name, test_cw_users.last_name, COUNT(test_reception.id) as count FROM test_cw_users LEFT JOIN test_reception ON test_reception.patient_userid = test_cw_users.userid GROUP BY test_reception.patient_userid ORDER BY test_cw_users.userid ASC
Несколько советов:
1. пользуйтесь
OR DIE()
в$db = mysql_connect("localhost","root","") or die("Не удается подключиться к MYSQL-серверу!");
mysql_select_db("vh34979_flowtv", $db) or die("Не удается выбрать базу данных!");
2. указывайте кодировку базы:
mysql_set_charset('utf8', $db);
3. пользуйтесь
echo mysql_error();
может помочь при непонятках/ошибках в запросе.Из запроса удалить
test_
Запрос можно сократить используя
AS
:SELECT u.userid, u.first_name, u.last_name, COUNT(r.id) as count FROM cw_users AS u LEFT JOIN reception AS r ON r.patient_userid = u.userid GROUP BY r.patient_userid ORDER BY u.userid ASC
Дублирую сюда:
$select = "SELECT userid, first_name, last_name, COUNT(id) as count
FROM test_cw_users
LEFT JOIN test_reception ON patient_userid = userid
GROUP BY patient_userid ORDER BY userid ASC";
$content = '-ID- ФИО (КОЛ-ВО)';
$db = mysql_connect ("localhost","root","");
mysql_select_db ("new", $db);
$res = mysql_query($select);
while($patient = mysql_fetch_assoc($res)) {
$content .= '-'.$patient["userid"].'- '.$patient["last_name"].' '.$patient["first_name"].' ('.$patient["count"].')';
}
$content .= '';
echo $content;
Интересно, почему у меня ничего не выдает????
А у вас таблицы то заполнены? По возможности скиньте дамп базы мне на почту info@csitess.ru
Выше ответил…
Как вывести обшее количество записей
SELECT COUNT(*) as all_users_count
— общее кол-во юзеровFROM cw_users
SELECT COUNT(*) as all_reception_count
— общее кол-во материаловFROM reception
Ну вы эт, не наглейте.))) Читайте документации. За следующую помощь буду просить $…
как можно добавит еше и условие WHERE cw_users.info = ‘».$_SESSION[‘info’].»‘ ?
все , разабрался!!!
Хочу подсчитать общее количество ‘.$patient[«count»].’ , не пойму как.
Спасибо за помощь, как проверю сражу скажу.
у меня в базе имеется 48 объявлений. на первой странице отображается 25 объявлений и на второй должен быть оставшиеся. все прекрасно работает, но когда добавил условие
WHERE dosort=".$do."
в COUNT первая страница показывает 25 объявлений, на втором выдает ошибкуmysql_fetch_array() expects parameter 1 to be resource, boolean given in
во второй строке.//////////
1. $chet=mysql_query("SELECT COUNT(*) FROM data WHERE dosort=".$do."",$mysql);
2. $temp=mysql_fetch_array($chet);
3. $posts=$temp[0];
Меня интересует
WHERE dosort = ".$do."
:dosort
— что за поле (int,text,varchar и т.д.)?$do
— что передается в переменную?dosort
имеет типint
. в переменнуюdo
передается число1
.Вообще пагинация лимитом делается:
$page_number = 2
— передаете в переменную номер запрашиваемой страницы$per_page = 25
— кол-во материалов выводимых на одну страницу$start = ($per_page*($page_number-1))+1
— начало лимита"SELECT * FROM data WHERE dosort=".$do." LIMIT ".$start.", ".$per_page
Сортируйте
ORDER BY
Подробнее читай тут:ruseller
Помогите с выпадающим списком
Есть база mysql «users»
PHP:
CREATE TABLE IF NOT EXISTS `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 '',
`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,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='Membership Information' AUTO_INCREMENT=1 ;
В строке "info" вводится или "Школа" или "Институт" или "Садик"
Мне нужно сделать группировку данных строки «info» и вывести в выпадающий список. Это я делаю вот таким способом
PHP:
<?
$sql = 'SELECT * FROM `users` group by `info`';
$result = mysql_query($sql);
// вывод на страницу
echo '';
print_r($rez_array);
// проходим весь массив и вывод данных массива с подстановкой.
while ($myrow = mysql_fetch_array($result,MYSQL_ASSOC)) {
echo ' ' . $myrow['info'] . ' ';
}
echo '';
// Освобождаем память
mysql_free_result($result);
// закрываем соединение
mysql_close($db);
?>
Теперь мне нужно, чтобы при выборе в выпадающем списке например «Школа», рядом с этим списком открылся другой выпадающий список, где были бы видны все «user»-ы у которых в поле «info» было бы введено слово «Школа», помогите с кодом.
Здравствуйте . Есть база данных клиентов и заказов на MS SQL Server . Нужно подсчитать сколько заказов приходится на каждого клиента . Делаю запрос
select
Table.p_fam ,—фамилия клиента
count (table.id_order) —номер заказа
from Table
group by Table.p_fam
на выходе получаю
Попов 1
Попов 1
Попов 1
Попов 1
а должно быть
Попов 4
Как это можно реализовать?
Спасибо.
Так номера заказов то разные, или я чего-то не понимаю.
помогите,пожалуйста.
Имеется БД(drivecar). В базе 2 таблицы car и drive.
Нужно построить таблицу количества машин по дате выпуска (столбцы – года);
while ($line = mysql_fetch_array($drive, MYSQL_ASSOC)) {
echo «»;
$result_count = mysql_query(«SELECT, count(*) as total from drivecar WHERE id=».$line[‘id’]);
$count = mysql_fetch_assoc($result_count);
array_shift($line);
foreach ($line as $col_value) {
echo «$col_value»;
}
echo «».$count[‘total’].»»;
echo «»;
}
Выводит просто список годов, 2005, 2002, 2005, 2005. А нужно, чтобы так:
2005 3
2002 1
Что не так?(((
Чет я не понял:
Имеется БД(
). В базе 2 таблицы
и
.
А потом вы почему-то в запросе пишите:
1. Запятой быть не должно.
2. Что за drivecar? В запросе надо обращаться к таблице(drive или car), а не к базе.
Чет я не понял:
Имеется БД(
). В базе 2 таблицы
и
.
А потом вы почему-то в запросе пишите:
1. Запятой быть не должно.
2. Что за drivecar? В запросе надо обращаться к таблице(drive или car), а не к базе.
Админ! Верни старую комментировалку. Было удобнее.
Это другой шаблон. Может прикрутить Дискус, Cackle? Или другую посоветуете…
Честно — можно оставить и эту, но прикрутить выделение текста (обычно желтым) в строке (без переноса) и вернуть тег
(чтоб тоже можно было отделять текст/код без переноса строк.
Ну вот вырезает текст. плохо это.
тег code.
Только сейчас глянул код страницы и понял, что теги-то остались. тег code так точно… Это очень хорошо. Вот еще бы и выделение (для заострения внимания читающего), и можно все остальное оставить как есть)))
Спасибо пригодилось! Чтобы статья сразу выводилось из «списка» определенной категории, если статья в «списке» только одна.
Господа! мне нужен SQL-запрос
SELECT kolvo=count(*) FROM имя_таблицы
чтобы количество строк попало в переменную kolvo!!!
Это можно сделать в MySQL или нет ???