За последние 24 часа нас посетили 26753 программиста и 1482 робота. Сейчас ищут 928 программистов ...

PDO или odbc

Тема в разделе "PHP и базы данных", создана пользователем Slavka, 17 фев 2015.

  1. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    Представляем ситуацию - сушествует 2 файла mdb , в них таблицы.
    Как в пхп сделать запрос между двумя этими базами =)

    ну например

    mdb1:
    table1:
    id,name

    mdb2
    table2
    id,product,id_table1

    Код (PHP):
    1. $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=; Pwd=;");
    2. $sql = "SELECT * from table1";
    3. $result =  $this->db->query ($sql);
    4. ....
    5. $db1 = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName1; Uid=; Pwd=;");
    6. $sql1 = "select from db1.table1.name,db2.table2.product from db2.table2 left join db1.table1 on table2.id_table1 = db1.table1.id
    7. ..
    ну чтото типа такого =) только как их скрестить реально я даже представить не могу
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    За один раз дернуть две базы? Боюсь, никак. Но, вариант, разумеется есть.
    Дерни одну, дерни вторую, а потом выполни нужные операции в коде на PHP. Если тебе нужно сделать что-то типа декартова перемножения (join), то это реализуется двойным циклом, ничего сверхъестественного.

    З.Ы. на Фейсбуке, кстати, вообще не используют join-ы в запросах по схожей причине. Им проще такие вещи решать уже руками, дергая БД только простейшими селектами.
     
  3. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    я нашел решение =)
    создается 3 файл mdb - назовем его клиент
    в нем линкуются все необходимые таблицы из 2+ баз .. и если надо сразу создаются запросы
    у меня спокойно получилось выполнить запрос из 3 или 4 таблиц в разных файлах =)
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Интересной была бы инфа о накладных расходах такого решения и подробности реализации.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А мдб это что?
     
  6. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    mdb это microsoft access

    ту феликс - не много не понял о каких расходах речь - все файлы в 1 папке на локальном диске .. обрабатывает похоже какаято виртуальная копия аксеса - не смотрел по процессам запускается он или нет =)

    а по части реализации - создай новый файл аксеса
    в таблицах есть возможность создать связь с табицами - там выбирается файл и таблица -) вот и вся реализация
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    может импортить в нормальную бд и уже там выборки делать?
     
  8. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    импортилка уже есть ( это было первое что я написал)- и она прекрасно работает - импортирует в постгришку и все связи и все все все.. но есть 1 но

    1. база состоит из 20 файлов mdb
    2. в каждой базе по 30-50 таблиц
    3. существует клиент ( на аксесе) для этих баз ~ 2000+ форм
    4. моя задача ничуть не изменилась - надо написать веб морду для всего этого
    при всей кажуйщеся легкости - в данный момент клиент - по требованию пользователей правят 3 человека.
    вносят в базу 250-300 человек - по разным направлениям
    я просто не успеваю в свою 2 руки переписывать да еше и изменять то что есть =)

    я сейчас хочу упрастить до нельзя и автоматизировать както перевод запросов с аксеса в постгришку .. и вообше подцепиться к "живым" данным =) чтобы пользователь зайдя в веб морду мог выбрать - "медленные но живые данные" , "быстрые но устаревшие". Мы уже несколько лет пытаемся выбить еше пару штаток в отдел но сами понимаете что нам показывают .

    самое смешное что наша существующая база - с win 8 уже не работает .. вообше - работает на xp , win 7x32 и нас уже очень все это начинает прижимать - компы то переодически меняем и уже проблемно находить win 7
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Погоди. Структура этих баз отличается, и ты импортишь их в разные бд ?
     
  10. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    все структуры различаются - там хранятся разные данные ( ну разве что архив ) с чем то пересекается по полям

    в постгришке база получается 1 но в ней сушествуют схемы - вот 1 схема соотвествует 1 файлу =)

    а в ней в рамках 1 базы ( но разных схем) прекрасно работают любые выборки - если ты об этом =))

    вот пример 1 из запросов на постгришке - переделывать не буду как есть =)

    Код (PHP):
    1.  $sql="SELECT\n".
    2. "\"URDATA\".\"INSTANC\".\"KODDELA\",\n".
    3. "\"URDATA\".\"INSTANC\".\"INST_DATA\",\n".
    4. "\"URDATA\".\"INSTANC\".\"INST_TIME\",\n".
    5. "\"URDATA\".\"INSTANC\".\"RES_DATA\",\n".
    6. "\"URDATA\".\"INSTANC\".\"PRIM\",\n".
    7. "\"URDATA\".\"URDELO\".\"ARXNOM\",\n".
    8. "\"KADRY\".\"SLUJ\".\"FAM\" ||' ' || left (\"KADRY\".\"SLUJ\".\"NAME1\",1) || '.' ||left (\"KADRY\".\"SLUJ\".\"NAME2\",1) || '.' AS \"ISPOLN2\",".
    9. "\"CLIENT\".\"SUD\".\"NAME\" AS \"INST_KOD\"\n".
    10. "FROM\n".
    11. "\"URDATA\".\"INSTANC\"\n".
    12. "INNER JOIN \"URDATA\".\"URDELO\" ON \"URDATA\".\"URDELO\".\"KODDELA\" = \"URDATA\".\"INSTANC\".\"KODDELA\"\n".
    13. "INNER JOIN \"KADRY\".\"SLUJ\" ON \"KADRY\".\"SLUJ\".\"KODS\" = \"URDATA\".\"INSTANC\".\"ISPOLN\"\n".
    14. "INNER JOIN \"CLIENT\".\"SUD\" ON \"URDATA\".\"INSTANC\".\"INST_KOD\" = \"CLIENT\".\"SUD\".\"KODIN\"\n".
    15. "WHERE\n".
    16. "\"URDATA\".\"URDELO\".\"ARXNOM\" ='".$_GET['ARXNOM']."' AND \"URDATA\".\"INSTANC\".\"KODDELA\" ='".$_GET['KODDELA']."'   LIMIT 1 OFFSET ".$_GET['NUM'];
    в данном запросе 1 база = имя которой тут не нужно - по имени просто идет коннект
    3 схемы ( URDATA,KADRY,CLIENT)

    ну а дальше просто обычный запрос =)

    Добавлено спустя 6 минут 26 секунд:
    какаяже меня седне идиотская мысль посетила -

    сделать некий конвертер из аксесовского запроса в постгришку - чтобы я не парился с ручной конвертацией
    не знаю получится или нет =) пока просто тесты идут
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    одинарные кавычки не думал использовать? =))))))
    А переводы строки серверу наверняка не нужны.

    Добавлено спустя 27 секунд:
    инъекция

    Добавлено спустя 1 минуту 22 секунды:
    блин, я не понял. ты ж только что сказал, что импортируются.

    Тебе нужна единая стркутура бд, которая позволяет импортить что угодно, и делать выборки. И тогда ты автоматом импортишь. А выборки строишь обычным способом.

    Все так делают. Будь как все. Большинство не может ошибаться. Я тебе говорю.
     
  12. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    есть прога называется navicat - позволяет делать визуально запросы - что проше.. и там же есть кнопка скопировать для php.

    я знаю что инъекция - это голая альфа - мне надо чтобы это просто работало - на дырки пока наплевать - да и в инет смотреть не будет - это внутриконторная прога - если чтото будет не так я смогу узнать пофамильно кто и что сделал =)


    существует конвертер который данные из аксеса перегоняет в постгришку - но запросы и выборки для веб морды надо переписывать ( вот это я задумал попробовать автоматизировать сейчас и это не просто ..)



    выборок тут даже посчитать нельзя - более 5000 в клиентах

    как ты себе представляеш единую структуру бд - если в 1 бд - это кадры , в другой бд это информация по договорам в 3 бд информация по земле.. и тд и тп..

    данные совершенно разные =)
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты уж определись

    либо данные совершенно разные, либо тебе надо делать выборку из разных бд. Настолько всё очевидно, что даже говорить дальше не охота. То, что ты их по разным бд разносишь - это ты сам себе буратинка. Удачи.
     
  14. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    в понятии аксеса - это разные базы данных ( разные файлы) - но также в клиенте они спокойно линкуются и использовать можно хоть все базы

    в понятии постгресса - используется только 1 база данных но много схем

    почему запрос был из нескольких баз - объясняю ..

    в базе кадры хранится информация о том кто работает ( очевидно не правда ли) тут список сотрудников .. список табелей.. больничных и тп

    показаный запрос отображает какой юрист за каким делом закреплен

    поэтому используется база urdata

    все юристы в штате - естесно берется ид юриста..

    мне продолжать ? все остальные базы и запросы построены по такому же принцыпу

    например - информация по земле .. в базе хранится инфа о владельце , адресе и тп. ( опять же все идами - т.к. у 1 владельца может несколько участков)

    поэтому много баз =)
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда нет проблем делать выборки отовсюду откуда хочется же ж
     
  16. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    ну вобшето у меня так и работает =)

    просто я сейчас хочу сделать чтобы можно было брать данные и с постгришки - но которые не обновляются но шустро работают
    и с аксеса - живые данные но которые медленно будут работать выборки..
    до того как я додумался в одбс сувать не клиента ( где уже все слинковано и запросы есть) - я пытался сунуть саму базу - и думал как между базами делать запросы.. =)

    короче шас у меня 1 проблема как написать унифицированный класс который бы в зависимости от ... ну например переменной - обрабатывался либо постгришкой или одбцшкой =)

    ну например
    $db -> select (какието столбцы) -> from ( какието таблицы)
    и тп.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ладно

    нахрена они вообще в аксесе работают, если у тебя всё в бд?
     
  18. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    базы аксесовские ведутся со времен еще до аксеса - потом они создавали в асесе клиент и с тех времен на 97 и работаем до сих пор =)

    сейчас встал вопрос о переделки клиента на чтото иное .. ну не на делфе же рисовать =) вот и выбрали вебморду =) вот под нее уже все и подготавливается - только нехватает ни рук ни времени чтобы переводить.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нанять кого мб?
     
  20. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    мы прикинули - у нас есть контора нанятая на другой проект .. - по ее ценам выдет лямов 30 -40 =)
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну очень может быть.