powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать COUNT в двух таблицах
25 сообщений из 26, страница 1 из 2
Сделать COUNT в двух таблицах
    #33257080
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею базу недвижимости , незнаю как подсчитать сколько есть объектов недвижимости(property) в каждом городе(town), с определенным количеством комнат(bedroom)
Пробую делать так:

SELECT town.id, town.name, count(property.id) as prop_num
FROM property, town, bedroom
WHERE property.id=bedroom.property_id
AND property.town_id=town.id
GROUP BY town.id, property.id
HAVING count(bedroom.id)>=1

неработает, как сделать правильный запрос?
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257377
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как он не работает? в чем выражается его нерабочесть?
Какая версия сервера?
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257431
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нерабочесть в том, что если группирую по GROUP BY town.id тогда не правильно считается HAVING count( bedroom.id ), если же группирую по GROUP BY property.id, вываливает несгруппированные города, как тогда подсчитать сколько объектов в каждом городе?
Пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT count( DISTINCT property.id ) AS prop_num, town.id, town.name
FROM property, town, bedroom
WHERE `agent_id` = '7'
AND town.id = property.town_id
AND property.id = bedroom.property_id
GROUP BY town.id
HAVING count( bedroom.id ) = 1 
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257438
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял - то вопрос вот это "как тогда подсчитать сколько объектов в каждом городе?"

Считать нужно от городов, т.е. от таблицы городов, цеплять на них левым объединением комнаты и считать их сумму. Группировать по ключу города, города ни с кем больше не соединять, чтобы не было лишнего мнодителя в произведении строк таблиц.

Может непонятно, но сильно влом писать твой запрос так как ты хочешь.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257439
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насколько я понимаю здесь подзапросов не разберешься?
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257440
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vixhнасколько я понимаю здесь подзапросов не разберешься?

да нет же, при чем тут подзапросы. Если не получается на обычных объединених, тогда что-то можно выложить в подзапрос, либо представить как derived table
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257442
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Считать нужно от городов, т.е. от таблицы городов, цеплять на них левым объединением комнаты и считать их сумму.
Как же комнаты прицепить к городам когда эти таблицы совсем не связаны?
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257444
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот что я сделал:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT count( DISTINCT property.id ) AS prop_num, town.id, town.name, count( bedroom.id )
FROM town
LEFT JOIN property ON town.id = property.town_id, bedroom
WHERE `agent_id` = '7'
AND property.id = bedroom.property_id
GROUP BY town.id
HAVING count( bedroom.id ) >= 0 
но результак как и раньше!
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257450
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь за невнимательность
как это нет линков от городов к комнатам - конечно есть - через таблицу property, вот и объединяй комнаты на property левым объединением тоже а в where оставь только агента, например так

SELECT town.id, town.name, count(distinct(bedroom.id)) as CountB
FROM town
LEFT JOIN property ON town.id = property.town_id
LEFT JOIN bedroom b ON property.id = bedroom.property_id
WHERE `agent_id` = '7'
GROUP BY town.id
HAVING countB>0;

вот вытаскивать сюда еще и номер свойства нет смысла, т.к. их как раз будет несколько и они вносят дисбаланс в результат запроса...

раскрыта тема запроса?
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257461
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению нет(
Результат твоего запроса аналогичен все предидущим.
Проблема вся в том, что если группировать по городу, он подсчитывает сколько комнат есть для всех объектов недвижимости этого города. Тоесть я не могу отфильтровать результат скажем для объектов с одной комнатой. Если я сгруппирую по объектам тогда не подсчитаю сколько их в каждом городе, он мне вываливает сктолько раз каждый город сколько есть в нем объектов.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257467
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот к примеру результат если группировать по городу
объектов id name count( bedroom.id)
9 3 Norths 18
5 5 Edi 15
6 6 Westwood 9

а вот когда группирую по объекту

1 3 Norths 2
1 3 Norths 2
1 5 Edi 3
1 5 Edi 3
1 5 Edi 3
1 5 Edi 3
1 6 Westwood 1
1 6 Westwood 1
1 6 Westwood 1
1 6 Westwood 1
1 6 Westwood 1
1 3 Norths 1
1 3 Norths 1
1 3 Norths 1
1 3 Norths 1
1 3 Norths 2
1 3 Norths 3
1 3 Norths 5
1 5 Edi 3
1 6 Westwood 4
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257471
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши, что ты хочешь получить внятно пожалуйста....
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257472
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хочу сделать вот что
подсчитать сколько есть объектов с одной комнатой в каждом городе.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257474
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ушел домой, завтра отвечу....
Так бы и сразу, а то, чего он не работает :)
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33257477
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OK, буду ждать.
Как мне кажется тут без IF не обойдешься.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33259841
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй

SELECT town.id,property.id, town.name, count(distinct(bedroom.id)) as CountB
FROM town
LEFT JOIN property ON town.id = property.town_id
LEFT JOIN bedroom b ON property.id = bedroom.property_id
WHERE `agent_id` = '7'
GROUP BY town.id, property.id
HAVING countB>0;
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33260757
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неа так не работает( результат тот же, что просто группироавть по городу без группировки по property.id
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33260898
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vixhнеа так не работает( результат тот же, что просто группироавть по городу без группировки по property.id

не может быть, чтобы результирующий набор был одинаков при группировке по городу и по городу+по проперти на 100%
Что-то ты не то говоришь.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33260917
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может быть сомтри , если хочешь я тебе могу дамп базы дать, попробуешь у себя.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33260955
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачу я вроде понял,
подсчитать кол-во квартир по городу и проперти, забыл что оно обозначает, но тем не менее.

Дай дамп этой пары таблиц, я погоняю у себя в тестовой базе, приаттач.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33260984
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дамп приатаченный, там только три таблички, думаю другие здесь не важны.
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33261286
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На тебе )))))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT TownID, Town, COUNT(CountB) AS CountProperties, countB AS NumberBeds FROM 
(SELECT town.id AS TownID, town.name AS Town, property.id AS PropertyID,
COUNT(bedroom.property_id) AS CountB FROM town
LEFT JOIN property ON town.id = property.town_id
LEFT JOIN bedroom ON property.id = bedroom.property_id
WHERE property.agent_id = '7'
GROUP BY property.id, town.id HAVING countB> 0  ORDER BY TownID ASC, countB
ASC) AS tmp_table GROUP BY TownID, countB

-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33261290
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно скажу, не понял вопроса, но почему то решил ответить
Сорри если не то ...
-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33261303
vixh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да это так, НО версия моего сервера 4.0 подзапросы не работают(
Я бы срадостью перешол на новую, но и у хостера 4.0 (
...
Рейтинг: 0 / 0
Сделать COUNT в двух таблицах
    #33261324
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тады ой ...
Создавай временную таблицу чтоль ...

-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сделать COUNT в двух таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]