Проблема со сложным запросом.

Voyager2K

Новичок
Проблема со сложным запросом.

Раньше все сложные задачи решал с помощью простых запросов SQL, все остальное посредством пхп. Теперь появилась необходимость одним запросом реализовать одну весЧь.

таблица t1
id text type
1 text1 1
2 text2 1
3 text3 1
4 bigtext1 2
5 bigtext11 2
6 bigtext 3


таблица t2
id1 id2
1 5
1 4
1 6


Дамп этих же таблиц:
[SQL]
CREATE TABLE `t1` (
`id` int(11) NOT NULL auto_increment,
`text` text NOT NULL,
`type` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

INSERT INTO `t1` VALUES (1, 'text1', 1);
INSERT INTO `t1` VALUES (2, 'text2', 1);
INSERT INTO `t1` VALUES (3, 'text3', 1);
INSERT INTO `t1` VALUES (4, 'big text1', 2);
INSERT INTO `t1` VALUES (5, 'big text11', 2);
INSERT INTO `t1` VALUES (6, 'big text', 3);

CREATE TABLE `t2` (
`id1` int(11) NOT NULL default '0',
`id2` int(11) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

INSERT INTO `t2` VALUES (1, 5);
INSERT INTO `t2` VALUES (1, 4);
INSERT INTO `t2` VALUES (1, 6);
[/SQL]

Поясню:
t1.id => t2.id1
t2.id2 => t1.id

То есть как одним запросом оргнизовать такое:
1. просмотреть t1 на наличие type = 1, если верно получить значение t1.id, то п.2
2. Искать все строки где t2.id1 = t1.id, и получить из этого значение t2.id2
3. Посмотреть(и выдать результат) сколько в t1 записей удовлетворяющих условию t1.id = t2.id2 AND type = 2
 

Wicked

Новичок
не совсем понял, что именно надо, но попробуй это:

[sql]select text_type_1.*, count(distinct(text_type_2.id)) from
t1 as text_type_1
inner join t2 on (text_type_1.id = t2.id1)
inner join t1 as text_type_2 on (text_type_1.id = t2.id2)
where
text_type_1.type = 1
and
text_type_2.type = 2
group by text_type_1.id[/sql]

-~{}~ 22.05.06 11:26:

Voyager2K
еще бы порекомендовал мыслить не в терминах "искать то, затем искать сё, затем из то и сё искать что-нибудь еще", а сразу в терминах декартова произведения множеств-таблиц (см. join), его фильтрации (см. where), и группировки (см. group by).
 

Voyager2K

Новичок
Wicked, огромное спасибище !

какя понимаю только не INNER JOIN t1 AS text_type_2 ON ( text_type_1.id = t2.id2 ), а INNER JOIN t1 AS text_type_2 ON ( text_type_2.id = t2.id2 ). Посидел еще часок, помозговал... домодернизировал код под свою задачу(тут я привел только часть требуемого с чем у меня загвоздка была, остальное под твой пример подогнал так намного короче даже код получился).

сразу в терминах декартова произведения
С связи с пока что слабыми знаниями мускула(да и др ДБ) это проблематично, все со временем будет =)
 
Сверху