связанные таблицы

filips

Новичок
связанные таблицы

как сделать запрос чтобы выводились данные из первой таблицы и к ним приклеивались данные из второй таблиции в соответствии с id первой таблицы и bank_id второй таблицы

но во второй таблице соответствий может быть несколько
 

hermit

Новичок
SELECT * FROM table1 JOIN table2 ON (table1.id = table2.bank_id)

или

SELECT * FROM table1, table2 WHERE table1.id = table2.bank_id
 

filips

Новичок
я пишу

SELECT banks.id, banks.bank_name, programs.id, programs.bank_id, programs.type_prog FROM `banks` JOIN programs ON (banks.id=programs.bank_id)

и выдает мне не все записи да и не так как надо

нужно чтобы выдовало примерно так:
Array
(
[id] => 4
[bank_name] => ЮниаструмБанк
Array
(
[id] => 7
[bank_id] => 4
[type_prog] => 1
}
Array
(
[id] => 8
[bank_id] => 4
[type_prog] => 3
}
)
 

hermit

Новичок
Как то тебе и рыбку съесть и все остальное =)
Варианта два, тебе возвращается двумерный массив, и можешь руками его разбирать и смотреть что куда относится, либо выбирать все записи из bank, а потом для каждой записи выбирать соответствующие записи из programs, т.к. MySQL не умеет двумерные массивы =)
 

WP

^_^
Шедевральная тема... Вспомнилось из "Иван Васильевич меняет профессию": "и тебя вылечат...".
[sql]
SELECT `banks`.`id`, `banks`.`bank_name`, `programs`.`id`, `programs`.`bank_id`, `programs`.`type_prog` FROM `banks` LEFT JOIN `programs` ON `banks`.`id` = `programs.`bank_id`
[/sql]
 

WP

^_^
baev
Ну дык, тема же шедевральная :D И потом... в том же фильме была фраза "и меня вылечат".
 

filips

Новичок
и в чем ошибка? у меня ни один из ващих примеров не работает так как надо
 

Фанат

oncle terrible
Команда форума
filips
ошибка в том, что ты пытаешься хапнуть запрос, но не пытаешься понять - что это такое и зачем.
А надо именно понять и сделать самостоятельно.

-~{}~ 31.05.06 10:25:

нужно чтобы выдовало примерно так:
зачем?
какой смысл во всех этих [bank_id], [type_prog] ?
 

filips

Новичок
Фанат
зачем?
какой смысл во всех этих [bank_id], [type_prog] ?
есть таблица с банками и таблица с кредитными програмами к ним, так вот надо сделать поиск и выводить банк и все его кредитные програмы. вот я и пытаюсь сделать все это в один запрос чтобы не делать кучу запростов и нагружать базу
 

hermit

Новичок
Не мучайся. Сделай два запроса, в котором из одной таблицы выбираются все банки, и вторым запросом выбираются все программы, а потом для каждого банка пробигайся циклом по программам и выкусывай необходимые программы. Но тут лучше смотреть какое будет количество банков и какое количество программ для каждого из них, а потом уже опираясь на эти данные выбирать оптимальный метод.
Возможно будет проще сделать как в самом верху и потом просто анализировать каждую запись, относится ли строка к тому же банку что и строка выше, если да, выводим программу для этого банка, если нет, то значит новый банк... Но при такой выборке будет оперативка забиваться лишней инфой (дублирование одной и той же инфы банка)

Так что определись с обьемами, подскажим что оптимальнее будет
 

hermit

Новичок
Тогда лучше
SELECT banks.id, banks.bank_name, programs.id, programs.bank_id, programs.type_prog FROM `banks` JOIN programs ON (banks.id=programs.bank_id)
как ты и писал

тогда после выборки у тебя должно получиться нечто похожее на:
id bank.name prog.id bank_id type_prog
1 bank1 5 1 6
1 bank1 6 1 9
1 bank1 8 1 7
2 bank2 10 2 1
2 bank2 11 2 5

ну и после этого бежишь по этому массивы и выводишь примерно так
PHP:
$bank_id = 0;
foreach ($banks as $bank){
      if ($bank['id'] != $bank_id){
           echo 'This is bank '.$bank['name'].'<br>';
           $bank_id = $bank['id'];
      }
      echo 'Type_prog for this bank is: '.$bank['type_prog'];
}
и в результате у тебя получится:
This is bank bank1
Type_prog for this bank is: 6
Type_prog for this bank is: 9
Type_prog for this bank is: 7
This is bank bank2
Type_prog for this bank is: 1
Type_prog for this bank is: 5
 

hermit

Новичок
Т.к. этот type_prog у него связан с каким то названием программы или еще с чем то, этой инфы он не давал. Я ему для примера вывел эту цифру а он уже пусть выводит что ему нужно. Думаю дальше сам уже разберется
 

Фанат

oncle terrible
Команда форума
чувак.
я ппоследний раз тебе говорю человеческим языком.
я не с тобой разговариваю.

если ума не хватает понять, о чём я говорю - стой молча.
 
Сверху