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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединить два запроса 
:(
    Опции темы
Gold Dragon
Дата 20.2.2014, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Есть два запроса:

Первый: получаем название модуля по ID
Код

SELECT `module` FROM `modules` WHERE `id` = $id

Второй получает количество таких модулей
Код

SELECT COUNT(`id`) FROM `modules` WHERE `module` = $module

Помогите объединить эти два запроса. И есть ли в этом смысл вообще?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Агрох
Дата 20.2.2014, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

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



Вложенный запрос и IN.
Код

SELECT COUNT(`id`) FROM `modules` WHERE `module` IN (SELECT `module` FROM `modules` WHERE `id` = $id);

--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Akina
Дата 20.2.2014, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Зачем IN-то? более того, зачем вообще нужно имя? таблица-то одна и та же...

Код

SELECT COUNT(`id`) 
FROM `modules
WHERE `id` = $id


Но если ID - ключ, то задача вообще лишена смысла...

Думаю, надо больше рассказать об исходных данных.


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

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



Предположу. Есть таблица: id, module, someotherparam

1, модуль1, лалала
2, модуль2, тутуту
3, модуль1, кукуку
4, модуль1, мумуму
5, модуль2, гыгыгы
...

Надо найти количество модулей с названием, таким же как в записи, где id = 3.
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Akina
Дата 20.2.2014, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Агрох @  20.2.2014,  16:25 Найти цитируемый пост)
Предположу

Ну тогда да, только лучше не IN, а равенство. Зачем формировать кэшируемую выборку, если в ней заведомо одна запись?
А ещё лучше - подзапрос в качестве второй таблицы. Тогда сервер гарантированно должен понять, что это не коррелируемый подзапрос, а независимый.


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

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 21.2.2014, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Akina @  20.2.2014,  14:19 Найти цитируемый пост)
Но если ID - ключ, то задача вообще лишена смысла...
Думаю, надо больше рассказать об исходных данных. 

Уж куда проще написал  smile
Именно 
Цитата(Агрох @  20.2.2014,  16:25 Найти цитируемый пост)
Надо найти количество модулей с названием, таким же как в записи, где id = 3. 


Цитата(Akina @  20.2.2014,  17:40 Найти цитируемый пост)
А ещё лучше - подзапрос в качестве второй таблицы. Тогда сервер гарантированно должен понять, что это не коррелируемый подзапрос, а независимый. 
Пример?

Добавлено через 1 минуту и 11 секунд
PS
как проверить скорость и размер памяти базы при выполнении запросов smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 21.2.2014, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Gold Dragon @  21.2.2014,  08:10 Найти цитируемый пост)
Пример?

Код

SELECT COUNT(t1.id) 
FROM modules t1, (SELECT t2.module FROM modules t2 WHERE t2.id = $id) t3
WHERE t1.id=t3.id;

Цитата(Gold Dragon @  21.2.2014,  08:10 Найти цитируемый пост)
Именно 

Что помешало самому так написАть?
Цитата(Gold Dragon @  21.2.2014,  08:10 Найти цитируемый пост)
как проверить скорость и размер памяти базы при выполнении запросов   

Зачем? варианты запросов у тебя есть, сравнивай explain-ы.


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

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 21.2.2014, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



запрос Агрох`a работает. А вот последний вариант выдаёт
Цитата

Unknown column 't3.id' in 'where clause'


Цитата(Akina @  21.2.2014,  08:30 Найти цитируемый пост)
Что помешало самому так написАть?
Ну неужели я бы стал задавать подобный вопрос если бы сам не помучился с пару часиков  smile Ты ж меня знаешь, уже второй десяток (почти) лет пошёл как знакомы  smile 

Понимаю что решение где-то близко, а вот с вложеннымим запросами туговато...


Это сообщение отредактировал(а) Gold Dragon - 21.2.2014, 07:59


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Akina
Дата 21.2.2014, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Gold Dragon @  21.2.2014,  08:58 Найти цитируемый пост)
последний вариант выдаёт

Друг мой, если Вам начали что-то отвечать - это не повод переставать думать самостоятельно...
Сервер говорит, что у t3 нет поля по имени id. А что выбирается в этом t3? а там SELECT module.
Код

WHERE t1.module=t3.module;



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

PM MAIL WWW ICQ Jabber   Вверх
Gold Dragon
Дата 21.2.2014, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Akina @  21.2.2014,  09:17 Найти цитируемый пост)
Друг мой, если Вам начали что-то отвечать - это не повод переставать думать самостоятельно...
 smile 

Всем спасибо...


PS
да вот на иногда смотришь и не можешь увидеть элементарное решение...  smile 



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Агрох
Дата 21.2.2014, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

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



Цитата(Akina @  20.2.2014,  17:40 Найти цитируемый пост)
Ну тогда да, только лучше не IN, а равенство.


Уже отвык от того что в MySQL так можно. В некоторых других СУБД надо именно IN, даже если возвращает 1 значение.
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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