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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с запросом, Выбрать из двух талиц 
:(
    Опции темы
izOne
Дата 5.3.2005, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Дано: две таблицы связь по mid
Задача: выбрать из таблицы table1 все строки, количество строк для которых в table2 >=, например, 3.
Пример:
table1
mid name
1 a1
2 b1
3 c1
tabel2:
id mid name
1 1 n1
2 1 n2
3 3 n3
4 2 n4
5 1 n5
6 3 n6
7 3 n7

Результат:
mid name
1 a1
3 c1
PM Jabber   Вверх
Kesh
Дата 5.3.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



что-нить типа
Код

SELECT t1.*, count(t2.*) AS `t2_cnt`
FROM `table1` t1, `table2` t2
WHERE (t1.`mid`=t2.`mid`)
AND (`t2_cnt`>3)



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Farik
Дата 5.3.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а GROUP BY разве не надо?
PM MAIL   Вверх
Kesh
Дата 5.3.2005, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



Farik наверное надо... не было времени проверять... GROUP BY t1.`name`


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
izOne
Дата 6.3.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



То что вы предложили - не работает. Сейчас сделал следующее:

Код

$query = $db->query("
 SELECT mt.*, count(pt.mid) AS 'progs'
 FROM ".MENU_TABLE." AS mt
  LEFT JOIN ".PROGRAM_TABLE." AS pt ON (pt.mid = mt.mid)
 WHERE (mt.level BETWEEN 1 AND 4) AND mt.visible='true'
 GROUP BY mt.mid
 ORDER BY mt.dbtree_left
");
$html = "\n<div id='menu'>\n";
$level = 0;
   if($rs = db_fetch_array($query)){
       do{
  if( (1 == $rs['dbtree_right'] - $rs['dbtree_left']) AND $rs['progs'] <=2){
   continue;
  }
  if($rs['level'] > $level){
   $level++;
   $html .= str_repeat("\t", $level-1)."<ul>\n";
  }elseif($rs['level'] < $level){
   $level--;
   $html .= str_repeat("\t", $level)."</ul>\n";  
  };
  if($selected !== 0 AND $rs['mid'] == $selected){
   $class = " class=\"selected\"";
  }else{
   $class = "";
  }
  $html .= str_repeat("\t", $level)."<li><a href=\"http://www.".CMS_DOMAIN."/".CMS_MODULE_EXT."/listgrp/".$rs['translit']."/".$rs['mid']."/index.htm\"".$class.">".$rs['name']."</a>\n";
       }while($rs = db_fetch_array($query));
   }
$html .= "\t</ul>\n</ul>\n</div>\n";


Хотелось бы
Код

  if( (1 == $rs['dbtree_right'] - $rs['dbtree_left']) AND $rs['progs'] <=2){
   continue;
  }

Вынести непосредственно в запрос.
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
Kesh
Дата 6.3.2005, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

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



izOne Вот это работает...
Код
SELECT t1.`mid`, t1.`name`, count(t2.`id`) AS `t2_cnt`
FROM `table1` t1, `table2` t2
WHERE t1.`mid`=t2.`mid`
GROUP BY t1.`name`
HAVING `t2_cnt`>=3

проверено на MySQL 4.1.10


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


 




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


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

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