Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Работа с несколькими БД одновременно


Автор: Black 30.7.2005, 10:48
Не могу работать одновременно с несколькими БД.
Работа ведется только с последней БД

Код

if(!$connect = mysql_pconnect("localhost", "user", "pass")) { exit; }
if (!mysql_select_db('logs', $connect)) { exit; }

if(!$connect1 = mysql_pconnect("localhost", "user", "pass")) { exit; }
if (!mysql_select_db('history', $connect1)) { exit; }


Как видите запрос к БД одинаковый и поэтому во втором случае он просто возвращает мне уже ранее открытый идентификтор подключения к БД.

А мне надо новый открыть, чтобы выбрать другую БД.

Как это можно делать?



Добавлено @ 10:54
Вылазает ошибка:

Table 'xxx' doesn't exist

Т.е. он (PHP) ищет таблицу не в той БД, а в другой где ее нету. А мне надо заставить его работать с несколькими БД одновременно и делать запрос на ту БД, которую я ему (PHP) говорю.

mysql_query("string", $connect);

Я то указываю ему идентификатор, но он то на одну БД :-)


Автор: Black 30.7.2005, 11:11
А все, разобрался надо использовать: mysql_connect

Автор: Bikutoru 30.7.2005, 11:14
PHP-DIRECTOR, а если просто использовать запросы типа

SELECT * FROM database1.table1, database2.table2;

Правда с правами может быть проблема...

Автор: Mal Hack 30.7.2005, 11:55
А не проще в нужном месте mysql_select_db() делать, а потом возвращать обратно?

Автор: Bikutoru 31.7.2005, 10:43
Цитата
А не проще в нужном месте mysql_select_db() делать, а потом возвращать обратно?

А с подобными вещами проблем не возникнет?
Код

mysql_select_db("db1", $db_link);
$sql_res = mysql_query("...", $db_link);
mysql_select_db("db2", $db_link);
while ($sql_row = mysql_fetch_assoc($sql_res))
{
  $sql_sub_res = mysql_query("...", $db_link);  
  while ($sql_sub_row = mysql_fetch_assoc($sql_sub_res))
  {
     ...
  }
}

Надо бы проверить...

Автор: Mal Hack 31.7.2005, 13:34
Цитата(Bikutoru @ 31.7.2005, 11:43)
А с подобными вещами проблем не возникнет?

Не думаю. В конце-концов, если скрипт использует 3-4 БД, это уже не правильное проектирование.
А то что лишний коннект - лишний тормоз и память, это факт.

Автор: Black 31.7.2005, 13:39
Mal Hack
ну не городить же 100 таблиц в одной БД :-)

Как тогда проектировать?

Автор: Mal Hack 31.7.2005, 13:57
Цитата(PHP @ 31.7.2005, 14:39)
ну не городить же 100 таблиц в одной БД :-)

ГОРОДИТЬ, ЕЩЕ КАК ГОРОДИТЬ !!!


Я сам думал ггод назад над этой проблемой. Ответ один - ОДНА база.
Эх, жаль тему найти не могу.

А, на другом форуме было: http://forum.woweb.ru/topic8813.html

Автор: Bikutoru 31.7.2005, 19:38
Цитата
ну не городить же 100 таблиц в одной БД :-)

Цитата
ГОРОДИТЬ, ЕЩЕ КАК ГОРОДИТЬ !!!

В одном проекте, с которым мне приходится работать ~150 таблиц. Ориентироваться нереально smile

Цитата
В конце-концов, если скрипт использует 3-4 БД, это уже не правильное проектирование.

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

Вроде бы понятно объяснил. Ну так вот, как такое реализовать без нескольких баз? Можно, конечно, заливать на одном сайте информацию в XML и считывать на другом, но гораздо проще напрямую копировать нужную информацию из базы в базу...

По-моему, нельзя категорично заявлять. Многое зависит от задачи.

Автор: Mal Hack 31.7.2005, 19:44
Цитата(Bikutoru @ 31.7.2005, 20:38)
Совсем не обязательно. Приведу пример.

Плохой пример smile Зеркала или резервные копии через RAID делаются и дампы smile
Да и избыточность информации - плохо. Всю инфу надо централизовывать.
Добавлено @ 19:46
Цитата(Bikutoru @ 31.7.2005, 20:38)
По-моему, нельзя категорично заявлять. Многое зависит от задачи.

Так-то оно так, НО приведи такую задачу, где надо использовать именно несколько баз и соединений... В люом члучае ее можно будет спроектировать по нормальному.

Автор: Bikutoru 31.7.2005, 19:49
Mal Hack, сайты несколько лет развивались независимо, структуры, в которых хранится информация очень сильно различаются, так что дамп не поможет...
Цитата
Всю инфу надо централизовывать.

Неплохо бы было... но пока шиш с маслом...
Добавлено @ 19:50
Цитата
В люом члучае ее можно будет спроектировать по нормальному.

Ты не учитываешь, что есть уже готовый код, который нужно поддерживать

Автор: Mal Hack 31.7.2005, 19:59
Цитата(Bikutoru @ 31.7.2005, 20:49)
Ты не учитываешь, что есть уже готовый код, который нужно поддерживать

И что? Кто мешает занова написать?
Т.е. грубо говоря... Предположим объединяются две крупные фирмы. Что бцдешь делать с бухами?
Правильно переводить всех на единую централизованную базы. Что касается старых записей то они остются ввиде архива !


Еще, как вариант: http://forum.vingrad.ru/index.php?showtopic=60097&unread=1&st=0&#entry480553

Автор: Bikutoru 1.8.2005, 09:11
Цитата
Кто мешает занова написать?

Начальство...

Автор: Black 1.8.2005, 10:02
Цитата
ГОРОДИТЬ, ЕЩЕ КАК ГОРОДИТЬ !!!


У меня уже 40 таблиц в БД :-) и их будет еще больше.
Ладно уговорили буду городить и городить.

Но другой вопрос... одна то база один файл... не слишком ли он будет тормозать, если слишком сильно на базу нагрузка будет.

А если несколько баз, то несколько файлов и вероятно нагрузка на них будет меньше.
Кто как думает?

Автор: Mal Hack 1.8.2005, 13:47
Цитата(PHP @ 1.8.2005, 11:02)
Но другой вопрос... одна то база один файл... не слишком ли он будет тормозать, если слишком сильно на базу нагрузка будет.

Это одна таблица один файл (на самом деле 3), а база - много файлов smile


Цитата(Bikutoru @ 1.8.2005, 10:11)
Начальство...

Давить такое начальство надо. Постарайся им объяснить, что если не сделать в один прекрасный момент все рухнет и начальник с прокуротурой общаться будет.

Автор: Bikutoru 1.8.2005, 14:00
Цитата
Давить такое начальство надо. Постарайся им объяснить, что если не сделать в один прекрасный момент все рухнет и начальник с прокуротурой общаться будет.

А причем здесь прокуратура?

Автор: Mal Hack 1.8.2005, 14:16
Bikutoru а это из разряда "весомых аргументов" smile
Особенно если дело касается бухгалтерии smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)