php mysql row count
mysql_num_rows
mysql_num_rows — Возвращает количество рядов результата запроса
Данный модуль устарел, начиная с версии PHP 5.5.0, и удалён в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API. Альтернативы для данной функции:
Описание
Список параметров
Возвращаемые значения
Количество рядов в результате запроса в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования mysql_num_rows()
Примечания
При использовании mysql_unbuffered_query() функция mysql_num_rows() не вернёт корректного значения до тех пор, пока все ряды не будут получены.
Для обратной совместимости может быть использован следующий устаревший псевдоним: mysql_numrows()
Смотрите также
User Contributed Notes 22 notes
Some user comments on this page, and some resources including the FAQ at :
This is not a particularly universal solution, and those who read these comments on this page should also be aware that
select count(*) may not give correct results if you are using «group by» or «having» in your query, as count(*) is an agregate function and resets eachtime a group-by column changes.
can be an alternative to sub-selects in mysql 3, and such queries cannot have the select fields replaced by count(*) to give good results, it just doesn’t work.
*Early detection of invalid constant expressions. MySQL quickly detects that some SELECT statements are impossible and returns no rows.
*All constant tables are read first, before any other tables in the query. A constant table is:
1) An empty table or a table with 1 row.
2) A table that is used with a WHERE clause on a UNIQUE index, or a PRIMARY KEY, where all index parts are used with constant expressions and the index parts are defined as NOT NULL.
Hopefully this will keep someone from staying up all night with 1146 errors, unless I am completely mistaken in thinking I have this figured out.
This seems the best workaround to get an ‘ordinary’ loop going, with possibility of altering output according to row number
(eg laying out a schedule)
In response to oran at trifeed dot com:
You are only experiencing this behaviour because you have not given your FOUND_ROWS() result an alias:
SELECT SQL_CALC_FOUND_ROWS together with
SELECT FOUND_ROWS()
After all there is an array of row arrays, as signified by
mysql_num_rows($result):
Say this gives «40 rows» : it would be useful to know when the iteration is on row 39.
The nearest seems to be «data seek»:but it connects directly to a
row number eg (from mysql_data_seek page)
= it still wouldn’t solve knowing what row number you’re on in an ordinary loop.
One reason for this situation is the php fetch (fetch-a-single-row) construction, without any reasonable FOR loop possibility with row numbers.
Suggestion:
$Rows[$i] possibility where
$i would be the row number
A note on the following usage; that suggest to use several MySQL Functions to get the number of Table Records.
You may be familiar with following:
= ‘Select SQL_CALC_FOUND_ROWS `MyField` From `MyTable` Limit 1;’ ;
$sqlQuery_1 = ‘Select FOUND_ROWS( );’ ;
?>
I omitted the actual connection to MySQL and the execution of the query, but you get the idea.
I did some tests and on a fairly high traffic web site, one that executes several queries quite often and found that using this combination of MySQL Functions can actually result in wrong results.
For example, assume I have two queries to get the number of Table Records in two different Tables. So in essence, we are executing 4 queries ( 2 queries for each Table ).
If two different requests come in through PHP, your going to run into problems. Note than when I mean request, I mean two different clients requesting your PHP page.
Execute: SQL_CALC_FOUND_ROWS On Table 1
Execute: SQL_CALC_FOUND_ROWS On Table 2
Execute: Select FOUND_ROWS( )
At this point, you see the race condition that occurred. While Request 1 was being executed, Request 2 came in.
At this point Request 1 will return the number of Table Records in Table 2 and not Table 1 as expected!
Why? Because MySQL does not differ between requests. Each query is in a queue waiting its turn. As soon as its turn comes in it will be executed my MySQL.
The MySQL Function Select FOUND_ROWS( ) will return the result of the last SQL_CALC_FOUND_ROWS!
MySQL 4.0 supports a fabulous new feature that allows you to get the number of rows that would have been returned if the query did not have a LIMIT clause. To use it, you need to add SQL_CALC_FOUND_ROWS to the query, e.g.
$sql = «Select SQL_CALC_FOUND_ROWS * from table where state=’CA’ limit 50»;
$result = mysql_query($sql);
$sql = «Select FOUND_ROWS()»;
$count_result = mysql_query($sql);
You now have the total number of rows in table that match the criteria. This is great for knowing the total number of records when browsing through a list.
To use SQL COUNT function, without select the source.
In preventing the race condition for the SQL_CALC_FOUND_ROWS and FOUND_ROWS() operations, it can become complicated and somewhat kludgy to include the FOUND_ROWS() result in the actual result set, especially for complex queries and/or result ordering. The query gets more complex, you may have trouble isolating/excluding the FOUND_ROWS() result, and mysql_num_rows() will return the number of actual results + 1, all of which makes your code messier and harder to read. However, the race condition is real and must be dealt with.
A alternative and cleaner method is to explicitly lock the table using a WRITE lock (preventing other processes from reading/writing to the table). The downsides I can see are a performance hit, and your mysql user must have lock permissions.
// excuse the use of mysqli instead of mysql
Actually I am a little ashamed to be saying this, but I stand corrected about a rather old note I posted on 17-Jul-2007 06:44.
Using SQL_CALC_FOUND_ROWS and FOUND_ROWS( ) will NOT trigger a race condition on MySQL, as that would pretty much defy their entire purpose.
The results for their usage is actually unique per connection session as it is impossible for processes to share anything in PHP. As far as PHP is concerned, each request represents a new connection to MySQL as each request is isolated to its own process.
To simulate this, create the following script:
?>
Set the connection and query information for something that matches your environment.
Run the script once with the Sleep query string and once again without it. Its important to run them both at the same time. Use Apache ab or something similar, or even easier, just open two browser tabs. For example:
If a race condition existed, the results of the first instance of the script would equal the results of the second instance of the script.
For example, the second instance of the script will execute the following SQL query:
( «SELECT SQL_CALC_FOUND_ROWS `aid` From `access` Limit 1» );
?>
This happens while the first instance of the script is sleeping. If a race condition existed, when the first instance of the script wakes up, the result of the FOUND_ROWS( ) it executes should be the number of rows in the SQL query the second instance of the script executed.
But when you run them, this is not the case. The first instance of the script returns the number of rows of its OWN query, which is:
( «SELECT SQL_CALC_FOUND_ROWS `bid` From `blocks` Limit 1» );
?>
So it turns out NO race condition exists, and every solution presented to combat this «issue» are pretty much not needed.
Определяем количество записей MySQL: пример кода
Функция COUNT()
Функция COUNT() возвращает количество записей в таблице, соответствующих заданному критерию.
Например, функция COUNT(*) возвращает общее количество записей в таблице:
Как посчитать количество записей и вывести на экран
Пример PHP+MySQL-кода для подсчета и вывода общего количества строк:
Использование функции COUNT() на примере
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 |
Если надо вывести населенный пункт и количество населенных пунктов в городе, то можно воспользоваться таким кодом:
Резюме
Есть таблица ORDER в которой отражаются заказы. В ORDER есть поле ITEM — наименование товара. Как одним запросом или вложенным запросом подсчитать какой товар заказывали больше всего? То есть узнать какое количество строк с одинаковым наименованием самое большое в таблице.
Всем заранее спасибо!
Как обычно сам и отвечаю:
SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC;
На выходе получаем количество вхождений каждого ITEM в порядке убывания.
Сорри, что сразу не мог ответить. Вы сделали все правильно.
SELECT item, COUNT(item) AS count FROM order GROUP BY item ORDER BY count DESC LIMIT 1;
SELECT item — это поле таблицы. В возвращаемом результате (а результатом будет таблица) поле будет иметь такое же имя.
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
+———+——-+
| 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 в джумле?
Это не связано с Джумлой. Вы допустили ошибку в синтаксисе передачи параметров метода 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 | количество записей |
---|---|
2 | 1 |
3 | 2 |
4 | 3 |
Для определения количества записей в каждой группе — запрос правильный
$res = mysql_query(«SELECT user_id, COUNT(*) FROM table GROUP BY user_id»);
COUNT(*) — считает сколько всего записей. В комбинации с GROUP BY идет подсчет записей в каждой группе, а не количество групп.
А как тогда посчитать количество групп?
Запрос совершенно верен и полностью решает первоначально поставленную задачу. Если же задача поменялась, пожалуйста, уточните ее.
Спасибо, badevlad. Всегда рад твоим компетентным и исчерпывающим ответам.
Как пояснил 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
id post
1 7
2 7
3 4
4 2
5 7
6 4
Должен вывести. На главной возле каждой статьи должен показать сколько Комментов с таким же параметром что и ID Таблицы. если post =7 значит он относиться к таблице 7.
Очень помог код. Я использовал вариант с условием где название поля равнялось конкретному значению. Таким образом подсчитал кол-во записей с этим значением. Мне это было нужно, чтобы на сайте, в спец. предложения, нельзя было добавлять одинаковый товар дважды. Теперь всё ок.
Классно. Я очень рад, что вам это пригодилось.
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»);
if ($total>$total2) <
echo («zavod»);
> else
echo («brig»);
во втором запросе что то не так, потому что он выводит общее количество строк, а в первом как надо, повторяющиеся
Помогите пожалуйста сделать как у вас на сайте и на других вывод количества комментарий в статье (39 комментариев:)
Задача решена, извените за неудобстава.
Статья взята из про. программирование на 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 не могу вытянуть.
Могу предложить только это:
Пол кода при вставке стирается((( Админы, что за?
Здравствуйте!
Кажется, всё понятно после вашего урока, ан не получается, прошу помоши.
Есть три таблицы:
таблица разделов parts с полями: id | part (плодовые, овощи, ягоды …)
таблица категорий cats с полями: id | id_part | cat (яблоня, картофель, клубника…)
таблица статей data с полями: id | id_cat | text | остальные поля.
Естественно, `cats`.`id_part`=`parts`.`id` и `data`.`id_cat`=`cats`.`id`
Вот мой запрос, выводящий в меню разделы и категории, причем пустые категории он не выводит, это так и надо:
Пожалуйста, подскажите, как изменить запрос и получить переменную $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
всем пивет нужна помощь, есть таблица
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
тогда напротив каждой записи единичка ))))
А нельзя чтоли просто посчитать кол-во выбранных записей?
А можно и просто после выбора записей из базы просто посчитать их php функцией count():
$totalRows = count($list);
Это на скорую руку написал, можно и оптимизировать и упростить, но принцип такой)
Нет, просто не получится:
Ну может тогда 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.’ ‘;
Поле first_name это строка (varchar) — по этому просто смотрим пустая она или нет…
Спасибо за ответ.
А как выводить число заполненных и не заполненных строк,
и как будет выглядить если строка не (varcher) а (data)?
как будет выглядить если строка не (varcher) а (data)? В смысле поле `date` из вашего примера?
Нет. Там «date» автозаполняемое поле, просто если там будет вводится дата?
Вот мой index.php
Добавить нового пациента
Нужно выводить число не заполненых полей «phone» и заполненных полей «phone»
. По этому запросу ничего не выводить
Здравствуйте, такой вопрос, имеются три таблицы:
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 добавлаю туда дату с помощю
,
Дело втом что выводится дата типа 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