Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение количества результатов двух таблиц 
V
    Опции темы
maxipub
  Дата 15.6.2016, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Ребята, из двух таблиц нужно сделать выборку с простым условием WHERE, и сравнить количество строк в обеих выборках. Выборку делаю, далее на PHP проверяю чтоб COUNT(o.id) == COUNT(i.id), а так же чтобы оба они были > 0. Вот собственно стало интересно, такое наверное можно сделать по средствам MySQL?

Пробую так:

Код
SELECT 
(select COUNT(id) from i where id=125) AS c1, 
(select COUNT(id) from o where id=125) AS c2 
FROM DUAL 
WHERE c1=c2 AND c1>0


Ругается: #1054 - Unknown column 'c1' in 'where clause' (так делать разве нельзя??? smile )

В итоге пришел к такому запросу:

Код
SELECT 1 FROM DUAL WHERE (select SUM(1) from i where id=125)=(select SUM(1) from o where id=125) AND (select SUM(1) from i where id=125)>0


Работает. Но какой-то уж больно "велосипедный" это вариант как по мне...
PM MAIL   Вверх
Akina
Дата 15.6.2016, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  15.6.2016,  16:03 Найти цитируемый пост)
так делать разве нельзя???

Конечно, нет. Подзапрос возвращает НАБОР ЗАПИСЕЙ. Считай, что таблицу. И неважно, что там одна запись из одного поля. А ты её пытаешься использовать как скалярную величину.
Код

SELECT c1.cnt1, c2.cnt2
FROM
    (SELECT COUNT(id) AS cnt1 FROM i WHERE id=125) AS c1, 
    (SELECT COUNT(id) AS cnt2 FROM o WHERE id=125) AS c2 
WHERE c1.cnt1 = c2.cnt2 AND c1.cnt1 > 0




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 15.6.2016, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, разницу понял, благодарю!

Понимаю, что тут подзапросы копеечные, но без них задачу не решить? Обычно не применяю их, хотя, может старомоден просто...
PM MAIL   Вверх
Zloxa
Дата 15.6.2016, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  15.6.2016,  17:08 Найти цитируемый пост)
без них

Как завещал Великий Цукерберг? smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 15.6.2016, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  15.6.2016,  17:08 Найти цитируемый пост)
без них задачу не решить?

Ну почему? запросто... особенно с учётом того, что само количество тебе не требуется.
Код

SELECT COUNT(DISTINCT t1.primary_id)*(COUNT(DISTINCT t1.primary_id)=COUNT(DISTINCT t2.primary_id))
FROM t1, t2
WHERE t1.id=125 AND t2.id=125




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
pantestin
Дата 16.6.2016, 23:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












Модератор: Сообщение скрыто.

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.