[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить запрос с двумя селектами
tim-ua
Есть таблица храмов, таблица священников и таблица связей - кто где служит:

church: id, name
kliriks: id, name
links: church_id, klirik_id, nast

столбец наст указывает настоятель ли священник в храме или нет, может принимать значение 1 или 0

Нужно выполнить запрос в котором будут всех храмы в которых ошибочно указано два настоятеля.

Помогите пожалуйста составить запрос



Спустя 6 минут, 39 секунд (28.07.2010 - 17:17) DedMorozzz написал(а):
SELECT c.name, k.name FROM links 
LEFT JOIN c ON c.id=l.id_c
LEFT JOIN k ON k.id=l.id_k
WHERE COUNT(DISTINCT k.name)>1
как-то так

Спустя 8 минут, 1 секунда (28.07.2010 - 17:25) tim-ua написал(а):
Пишет Invalid use of group function sad.gif

Спустя 3 минуты, 23 секунды (28.07.2010 - 17:29) DedMorozzz написал(а):
эм....веа, на хевинг замени. Ну и естесно полные имена пропиши. Я почти везде только 1ю букву указывал

Спустя 46 секунд (28.07.2010 - 17:29) tim-ua написал(а):
Я подставил свои имена, всеравно

Спустя 1 минута, 41 секунда (28.07.2010 - 17:31) DedMorozzz написал(а):
так а HAVING сделал вместо WHERE?

Спустя 1 минута, 38 секунд (28.07.2010 - 17:33) tim-ua написал(а):
SELECT * FROM dbcklink LEFT JOIN dbchurch ON dbchurch.id=dbcklink.churchid HAVING COUNT(DISTINCT dbcklink.id)>1 AND dbcklink.nast =1

Выводит только один храм

Спустя 1 минута, 20 секунд (28.07.2010 - 17:34) DedMorozzz написал(а):
А чего 1 лефт джоин?

Спустя 53 секунды (28.07.2010 - 17:35) tim-ua написал(а):
Ну какие именно священники можно и потом добавить главное в каких храмах больше одного

Спустя 1 минута, 9 секунд (28.07.2010 - 17:36) DedMorozzz написал(а):
и что это "(DISTINCT dbcklink.id)" значит*? Айди всегда уникальны.

Спустя 2 минуты, 50 секунд (28.07.2010 - 17:39) tim-ua написал(а):
COUNT(DISTINCT dbcklink.churchid)>1 - тожесамое

Спустя 1 минута (28.07.2010 - 17:40) DedMorozzz написал(а):
churchid - это не айди? У тебя не может быть двух ОДИНАКОВЫХ айди.
Смотри, алгоритм таков. Тебе необходимо 3 таблицы соединить. Далее выбрать всё из таблиц в которых более 1го раза повторяеться 1 и тот же монастырь.

Спустя 2 минуты, 26 секунд (28.07.2010 - 17:42) tim-ua написал(а):
dbcklink.churchid - это айди храмов в таблице связей, в ней может быть несколько одинаковых айд храмов, так, как в храме может быть несколько священников

Спустя 2 минуты, 44 секунды (28.07.2010 - 17:45) tim-ua написал(а):
Так вроде так и есть
SELECT * FROM dbcklink LEFT JOIN dbchurch ON dbchurch.id=dbcklink.churchid HAVING COUNT(DISTINCT dbcklink.klirikid)>1

Выбрать все из таблицы связей подключить таблицу храмов где в таблице связей ид храмов больше 1

Спустя 33 секунды (28.07.2010 - 17:46) tim-ua написал(а):
можно вообще не подключать таблицу храмов, выводить только ид храмов из таблицы связей

Спустя 58 секунд (28.07.2010 - 17:47) tim-ua написал(а):
SELECT * FROM dbcklink HAVING COUNT(DISTINCT dbcklink.churchid)>1 - всеравно не работает

Спустя 1 минута, 53 секунды (28.07.2010 - 17:49) inpost написал(а):
tim-ua Тебе это в каких целях? Как часто будет запрос? Можно немного тяжелым сделать, но если он не будет часто использоваться =)

Спустя 58 секунд (28.07.2010 - 17:50) DedMorozzz написал(а):
да ты что издеваешся?! dbcklink.churchid - ЭТО СНОВА ТАКИ АЙДИ. АЙДИ НЕ МОЖЕТ повторяться дважды.

Спустя 2 минуты, 20 секунд (28.07.2010 - 17:52) tim-ua написал(а):
не пойму ну это же ади храма в таблице связей, он может там повторяться, он не может повторяться в таблице храмов, если несколько священников в одном храме то в таблице связей будет два раза один айди храма и разные айди священника

Спустя 4 минуты, 4 секунды (28.07.2010 - 17:56) inpost написал(а):
COUNT(*) таблицы church.
получим число храмов! = $a;
for (i=1; i < $a; i++) 
{
$sql = mysql_query ("SELECT * FROM links WHERE nast=1 AND `churst_id` = '".$a."'",$db);
if (mysql_num_rows($pages) > 1) {"ТУТ ИХ БОЛЬШЕ +)";}
}

Спустя 1 минута, 56 секунд (28.07.2010 - 17:58) inpost написал(а):
А лучше всего В поле священников добавить 2 значения: привязку к храму, и настоятель в каком из храмов! (если 0 - то нигде)

Спустя 52 секунды (28.07.2010 - 17:59) tim-ua написал(а):
примерно так и было до этого, но храмов больше 400, получается больше 400 запросов при обращении к каждой странице админки

Спустя 4 минуты, 7 секунд (28.07.2010 - 18:03) inpost написал(а):
tim-ua убери таблицу связей ВООБЩЕ! Сделай связь в таблице священников! Как я перед этим написал! Это было бы вообще идеально! И нагрузка с базы упадет!

Спустя 2 минуты, 49 секунд (28.07.2010 - 18:06) DedMorozzz написал(а):
дай дамп БД - сделаю запрос

Спустя 26 секунд (28.07.2010 - 18:06) SlavaFr написал(а):
SELECT dbcklink.churchid,  COUNT( dbcklink.churchid) AS kol FROM dbcklink
where nast ='1' group by dbcklink.churchid HAVING COUNT( dbcklink.churchid)>1

Спустя 3 минуты, 12 секунд (28.07.2010 - 18:09) tim-ua написал(а):
То, что нада!

Всем спасибо огромное!!! Извините что изъясняюсь криво.

Спустя 2 минуты, 45 секунд (28.07.2010 - 18:12) inpost написал(а):
Добавляешь к священникам 2 поля: id_храм (привязка) и настоятель_в (привязка).
SELECT * FROM links
while($myrow)
{
INSERT INTO священники
SET храм_ид и настоятель_ид
WHERE id = $myrow['священник_id']
}


И всё, проблем не будет +))) Одной операцией все перебросишь, а дальше будешь шиковать в удобстве!

Спустя 2 минуты, 46 секунд (28.07.2010 - 18:15) tim-ua написал(а):
К сожалению база большая уже и слишком много страниц работают с этой таблицей чтоб ее переделывать sad.gif

Кроме того священник то может и в двух храмах служить, как тогда?

Спустя 5 минут, 33 секунды (28.07.2010 - 18:20) SlavaFr написал(а):
@inpost священик может к нескольким храмам пренадлежать и не исключено что он настаятелем в нескольких храмах быть может.
Условие было, что в одном храме есть только один наставник, т.е возможно было бы лучше к храму наставника ид прецепить.

твое предложение с циклом for не хорошее.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.