Представляем ситуацию - сушествует 2 файла mdb , в них таблицы. Как в пхп сделать запрос между двумя этими базами =) ну например mdb1: table1: id,name mdb2 table2 id,product,id_table1 Код (PHP): $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=; Pwd=;"); $sql = "SELECT * from table1"; $result = $this->db->query ($sql); .... $db1 = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName1; Uid=; Pwd=;"); $sql1 = "select from db1.table1.name,db2.table2.product from db2.table2 left join db1.table1 on table2.id_table1 = db1.table1.id .. ну чтото типа такого =) только как их скрестить реально я даже представить не могу
За один раз дернуть две базы? Боюсь, никак. Но, вариант, разумеется есть. Дерни одну, дерни вторую, а потом выполни нужные операции в коде на PHP. Если тебе нужно сделать что-то типа декартова перемножения (join), то это реализуется двойным циклом, ничего сверхъестественного. З.Ы. на Фейсбуке, кстати, вообще не используют join-ы в запросах по схожей причине. Им проще такие вещи решать уже руками, дергая БД только простейшими селектами.
я нашел решение =) создается 3 файл mdb - назовем его клиент в нем линкуются все необходимые таблицы из 2+ баз .. и если надо сразу создаются запросы у меня спокойно получилось выполнить запрос из 3 или 4 таблиц в разных файлах =)
mdb это microsoft access ту феликс - не много не понял о каких расходах речь - все файлы в 1 папке на локальном диске .. обрабатывает похоже какаято виртуальная копия аксеса - не смотрел по процессам запускается он или нет =) а по части реализации - создай новый файл аксеса в таблицах есть возможность создать связь с табицами - там выбирается файл и таблица -) вот и вся реализация
импортилка уже есть ( это было первое что я написал)- и она прекрасно работает - импортирует в постгришку и все связи и все все все.. но есть 1 но 1. база состоит из 20 файлов mdb 2. в каждой базе по 30-50 таблиц 3. существует клиент ( на аксесе) для этих баз ~ 2000+ форм 4. моя задача ничуть не изменилась - надо написать веб морду для всего этого при всей кажуйщеся легкости - в данный момент клиент - по требованию пользователей правят 3 человека. вносят в базу 250-300 человек - по разным направлениям я просто не успеваю в свою 2 руки переписывать да еше и изменять то что есть =) я сейчас хочу упрастить до нельзя и автоматизировать както перевод запросов с аксеса в постгришку .. и вообше подцепиться к "живым" данным =) чтобы пользователь зайдя в веб морду мог выбрать - "медленные но живые данные" , "быстрые но устаревшие". Мы уже несколько лет пытаемся выбить еше пару штаток в отдел но сами понимаете что нам показывают . самое смешное что наша существующая база - с win 8 уже не работает .. вообше - работает на xp , win 7x32 и нас уже очень все это начинает прижимать - компы то переодически меняем и уже проблемно находить win 7
все структуры различаются - там хранятся разные данные ( ну разве что архив ) с чем то пересекается по полям в постгришке база получается 1 но в ней сушествуют схемы - вот 1 схема соотвествует 1 файлу =) а в ней в рамках 1 базы ( но разных схем) прекрасно работают любые выборки - если ты об этом =)) вот пример 1 из запросов на постгришке - переделывать не буду как есть =) Код (PHP): $sql="SELECT\n". "\"URDATA\".\"INSTANC\".\"KODDELA\",\n". "\"URDATA\".\"INSTANC\".\"INST_DATA\",\n". "\"URDATA\".\"INSTANC\".\"INST_TIME\",\n". "\"URDATA\".\"INSTANC\".\"RES_DATA\",\n". "\"URDATA\".\"INSTANC\".\"PRIM\",\n". "\"URDATA\".\"URDELO\".\"ARXNOM\",\n". "\"KADRY\".\"SLUJ\".\"FAM\" ||' ' || left (\"KADRY\".\"SLUJ\".\"NAME1\",1) || '.' ||left (\"KADRY\".\"SLUJ\".\"NAME2\",1) || '.' AS \"ISPOLN2\",". "\"CLIENT\".\"SUD\".\"NAME\" AS \"INST_KOD\"\n". "FROM\n". "\"URDATA\".\"INSTANC\"\n". "INNER JOIN \"URDATA\".\"URDELO\" ON \"URDATA\".\"URDELO\".\"KODDELA\" = \"URDATA\".\"INSTANC\".\"KODDELA\"\n". "INNER JOIN \"KADRY\".\"SLUJ\" ON \"KADRY\".\"SLUJ\".\"KODS\" = \"URDATA\".\"INSTANC\".\"ISPOLN\"\n". "INNER JOIN \"CLIENT\".\"SUD\" ON \"URDATA\".\"INSTANC\".\"INST_KOD\" = \"CLIENT\".\"SUD\".\"KODIN\"\n". "WHERE\n". "\"URDATA\".\"URDELO\".\"ARXNOM\" ='".$_GET['ARXNOM']."' AND \"URDATA\".\"INSTANC\".\"KODDELA\" ='".$_GET['KODDELA']."' LIMIT 1 OFFSET ".$_GET['NUM']; в данном запросе 1 база = имя которой тут не нужно - по имени просто идет коннект 3 схемы ( URDATA,KADRY,CLIENT) ну а дальше просто обычный запрос =) Добавлено спустя 6 минут 26 секунд: какаяже меня седне идиотская мысль посетила - сделать некий конвертер из аксесовского запроса в постгришку - чтобы я не парился с ручной конвертацией не знаю получится или нет =) пока просто тесты идут
одинарные кавычки не думал использовать? =)))))) А переводы строки серверу наверняка не нужны. Добавлено спустя 27 секунд: инъекция Добавлено спустя 1 минуту 22 секунды: блин, я не понял. ты ж только что сказал, что импортируются. Тебе нужна единая стркутура бд, которая позволяет импортить что угодно, и делать выборки. И тогда ты автоматом импортишь. А выборки строишь обычным способом. Все так делают. Будь как все. Большинство не может ошибаться. Я тебе говорю.
есть прога называется navicat - позволяет делать визуально запросы - что проше.. и там же есть кнопка скопировать для php. я знаю что инъекция - это голая альфа - мне надо чтобы это просто работало - на дырки пока наплевать - да и в инет смотреть не будет - это внутриконторная прога - если чтото будет не так я смогу узнать пофамильно кто и что сделал =) существует конвертер который данные из аксеса перегоняет в постгришку - но запросы и выборки для веб морды надо переписывать ( вот это я задумал попробовать автоматизировать сейчас и это не просто ..) выборок тут даже посчитать нельзя - более 5000 в клиентах как ты себе представляеш единую структуру бд - если в 1 бд - это кадры , в другой бд это информация по договорам в 3 бд информация по земле.. и тд и тп.. данные совершенно разные =)
ты уж определись либо данные совершенно разные, либо тебе надо делать выборку из разных бд. Настолько всё очевидно, что даже говорить дальше не охота. То, что ты их по разным бд разносишь - это ты сам себе буратинка. Удачи.
в понятии аксеса - это разные базы данных ( разные файлы) - но также в клиенте они спокойно линкуются и использовать можно хоть все базы в понятии постгресса - используется только 1 база данных но много схем почему запрос был из нескольких баз - объясняю .. в базе кадры хранится информация о том кто работает ( очевидно не правда ли) тут список сотрудников .. список табелей.. больничных и тп показаный запрос отображает какой юрист за каким делом закреплен поэтому используется база urdata все юристы в штате - естесно берется ид юриста.. мне продолжать ? все остальные базы и запросы построены по такому же принцыпу например - информация по земле .. в базе хранится инфа о владельце , адресе и тп. ( опять же все идами - т.к. у 1 владельца может несколько участков) поэтому много баз =)
ну вобшето у меня так и работает =) просто я сейчас хочу сделать чтобы можно было брать данные и с постгришки - но которые не обновляются но шустро работают и с аксеса - живые данные но которые медленно будут работать выборки.. до того как я додумался в одбс сувать не клиента ( где уже все слинковано и запросы есть) - я пытался сунуть саму базу - и думал как между базами делать запросы.. =) короче шас у меня 1 проблема как написать унифицированный класс который бы в зависимости от ... ну например переменной - обрабатывался либо постгришкой или одбцшкой =) ну например $db -> select (какието столбцы) -> from ( какието таблицы) и тп.
базы аксесовские ведутся со времен еще до аксеса - потом они создавали в асесе клиент и с тех времен на 97 и работаем до сих пор =) сейчас встал вопрос о переделки клиента на чтото иное .. ну не на делфе же рисовать =) вот и выбрали вебморду =) вот под нее уже все и подготавливается - только нехватает ни рук ни времени чтобы переводить.