SELECT из 2 полусвязанных таблиц :)

DpoHro

Новичок
SELECT из 2 полусвязанных таблиц :)

Есть 2 таблицы.
Т1, Т2.
Т2 содержит ключ из Т1
Но! Если ключ = 0, то данная запись не ссылается на Т1.
Вопрос: как сделать выборку из Т2 и связанных записей и несвязанных?

Т1:
Код:
CREATE TABLE `am_cost_ranges` (
  `cr_id` bigint(20) NOT NULL auto_increment,
  `cr_begin` int(11) NOT NULL default '0',
  `cr_end` int(11) NOT NULL default '0',
  `cr_objtype_id` bigint(20) NOT NULL default '0',
  `cr_company_id` bigint(20) NOT NULL default '0',
  `cr_rulegroup_id` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`cr_id`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;
Т2:
Код:
CREATE TABLE `am_rule_base` (
  `rb_id` bigint(20) NOT NULL auto_increment,
  `rb_years` smallint(6) NOT NULL default '0',
  `rb_costrange_id` bigint(20) NOT NULL default '0',
  `rb_rate_damage` double NOT NULL default '0',
  `rb_rate_hijacking` double NOT NULL default '0',
  `rb_rate_full` double NOT NULL default '0',
  `rb_objtype_id` int(11) NOT NULL default '0',
  `rb_company_id` int(11) NOT NULL default '0',
  `rb_rulegroup_id` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`rb_id`)
) TYPE=MyISAM AUTO_INCREMENT=30 ;
В данном случае связь через rb_costrange_id.
Если данные из Т1 не участвуют в работе, то туда записывается 0.
 

alpine

Новичок
DpoHro
Но! Если ключ = 0, то данная запись не ссылается на Т1.
Вопрос: как сделать выборку из Т2 и связанных записей и несвязанных?
Так а в чем собственно затруднение написать запрос, если ты знаешь, что для связанных записей у тебя rb_costrange_id<>0, а для не связанных rb_costrange_id=0 ?
 

DpoHro

Новичок
Нет мне нужно для полей

rb_objtype_id
rb_company_id
rb_rulegroup_id

удовлетворяющим моим требованиям выбрать как связанные, так и несвязанные записи в один массив. Мне нужно вывести 2-мерную таблицу по полям
rb_costrange_id x rb_years

Но rb_costrange_id может быть = 0, в этом случае таблица одномерная...
Но данные могут быть представлены одновременни и так и так.

-~{}~ 19.08.07 13:16:

Wicked
Что именно мне даст LEFT JOIN?
Я выбираю все записи вот таким образом:

select * from am_rule_base, am_cost_ranges WHERE rb_company_id='1' AND rb_objtype_id='1' AND rb_rulegroup_id='1' AND am_cost_ranges.cr_id=am_rule_base.rb_costrange_id

Этот запрос мне дает в результате только записи связанные с Т1
 

Wicked

Новичок
ну ты неявно используешь INNER JOIN, который дает тебе только записи связанные с Т1. LEFT JOIN способен дать тебе все записи, и связанные, и не связанные.
 

DpoHro

Новичок
for example??
Я пока не освоил это дело =)
+ link на ман, плз... Хотя предполагаю ссылку вида http://www.mysql.com =) Может чтото есть получше, против англ. ничего не имею.
 

Beavis

Banned
SELECT * FROM `am_rule_base` AS `r` LEFT JOIN `am_cost_ranges` AS `c` ON `c`.`cr_id` = `r`.`rb_costrange_id` WHERE `rb_company_id`= 1 AND `rb_objtype_id`= 1 AND `rb_rulegroup_id`= 1
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Beavis
в форуме начали давать готовые решения?
 

DpoHro

Новичок
А ктото запрещал?
Или тут все искренние и неколебимые последователи одного известного тут человека?
Все имеют свое мнение, остальных "имеет" чужое мнение.

-~{}~ 19.08.07 17:04:

Beavis
thx

-~{}~ 19.08.07 17:05:

Wicked
respect
 

HraKK

Мудак
Команда форума
DpoHro
Не не все.

Есть еще те кто оказывают медвежьи услуги таким как ты.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
А ктото запрещал?
"Для чего нужен форум" напомнить?

Или тут все искренние и неколебимые последователи одного известного тут человека?
Все имеют свое мнение, остальных "имеет" чужое мнение.
Мне всё равно кто|что Вас имеет.

Пути решения пробемы, которые вы прошли самостоятельно, Вы запомните раз и навсегда.
Готовое решение от "доброго" человека Вас вряд-ли чему-либо научит.

Ещё вопросы будут?

-~{}~ 19.08.07 16:40:

Детский сад
Отредактировано DpoHro 19.08.07 в 16:05
 

DpoHro

Новичок
Автор оригинала: Mr_Max
Ещё вопросы будут?
Остались только неприличные :D

http://phpclub.ru/talk/showthread.php?s=&postid=93186#post93186
http://phpclub.ru/talk/showthread.php?s=&threadid=20894

Вобщем у всех когдато был детский сад.

А вообще я с тобой согласен, разобраться самому лучше, но влом оказалось и вот я тут, и ничего со мной не поделаешь :D
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
DpoHro
было 5 лет назад
ещё что=нибудь?
 
Сверху