Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
309 / 205 / 44
Регистрация: 15.02.2012
Сообщений: 605
1

Выбрать массив таблиц, из которых происходит выборка

15.07.2013, 19:48. Показов 838. Ответов 4
Метки нет (Все метки)

Здравствуйте! Подскажите, пожалуйста - есть такая строчка
PHP
1
2
3
4
5
$str = 'SELECT users.silver, uses.gold, users.fuel, users.next_supply, users.current_aircraft_id, users.last_active,
                                 aircrafts.armor, aircrafts.hp, aircrafts.manoeur, aircrafts.velocity, aicrafts.might_sum, 
                                 type_aircrafts.name_aircraft,
                                 type_airfields.name_airfield
                          FROM ...'
из неё нужно выбрать массив таблиц, из которых происходит выборка - array ('users', 'users', ..., 'aircrafts', ...)
пытаюсь осуществить такой регуляркой:

PHP
1
preg_match_all('/SELECT\s(([a-z_]+)\.[a-z_]+[^a-z_]+)+FROM/', $str, $array);
но она почему-то возвращает лишь type_airfields - таблица последнего поля.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2013, 19:48
Ответы с готовыми решениями:

Выбрать из таблиц с повторяющимися записями те записи, которых нет в одной из таблиц
Есть две таблицы в которых некоторые записи повторяються, надо выбрать записи которых нет в одной...

Сформировать поиск данных в БД Access при условии что выборка происходит не из таблиц, а из запроса
Помогите пожалуйста! На первом рисунке именно то,что мне нужно То есть в поле TextBox...

Выборка значений которых нет в одной и 2-х таблиц
Есть две таблицы taxpay и cheta. Этим запросом я выбираю количество лиц, которые имею счета, а вот...

Выборка из таблиц не выводит строки в которых значение null
Подскажите пожалуйста, пол ночи голову ломал и опять ломаю..... Есть мультизапрос в базу $result =...

4
283 / 282 / 73
Регистрация: 06.05.2013
Сообщений: 1,613
16.07.2013, 10:23 2
мб попробовать

PHP
1
2
3
foreach ($str as $key =>$value) {
preg_match_all('/SELECT\s(([a-z_]+)\.[a-z_]+[^a-z_]+)+FROM/', $value, $array);
}
или я неправильно Вас понял?)
0
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
16.07.2013, 15:14 3
jivot, В общем случае Ваша задача чрезмерно сложна и неоправдана. Ведь существуют запросы разного рода, подзапросы разного рода и потенциально неограниченной вложенности, алиасы таблиц (из-за них уже можно и не отличить настоящую таблицу от алиаса таблицы), полные имена таблиц вместе с именем базы. Для полноценного гарантированного решения задачи необходим полноценный парсинг запросов, а это бред - этим уже занимается СУБД.

Добавлено через 3 минуты

Не по теме:

jivot, После выполнения запросы можно средствами СУБД получить инфу о полях результата. В этой инфу может быть и инфа о "таблице", из которой пришло поле.

0
309 / 205 / 44
Регистрация: 15.02.2012
Сообщений: 605
16.07.2013, 16:49  [ТС] 4
да я понимаю, что чересчур мудрёно ... я уже отказался от этого пути, но все равно остался непонятен вопрос - неужели так сложно выцепить нужную информацию одной регуляркой из данной строки? Она состоит из вполне определённых элементов - SELECT + некоторое количество полей по маске {table}.{field}, разделённых запятой и пробелом (возможны переносы строк, табуляция и прочие прелести форматирования) + FROM + остальная ненужная информация

Если первоначально вырезать из строки диапазон между SELECT и FROM, то вот такая регулярка дает нужный результат:
PHP
1
preg_match_all('~\s([a-z_]+)\.~', $string, $array);
а вот для изначального полного запроса что-то не получается составить

Цитата Сообщение от sMockingbird Посмотреть сообщение
или я неправильно Вас понял?)
Я, в свою очередь, не очень понял Вас ... данный код не работает, хотя бы потому, что $str - строка и скормить её циклу foreach не получается
0
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
16.07.2013, 17:17 5
Цитата Сообщение от jivot Посмотреть сообщение
неужели так сложно выцепить нужную информацию одной регуляркой из данной строки?
Задача изначально поставлена для какой-то конкретной строки, взятой с потолка. О расширяемости на другие строки ни слова не сказано. А вариантов - бесконечной количество.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2013, 17:17

Выбрать из 3-х таблиц, 2-е из которых в другой БД
Добрый день всем! Задача такая (хочется обойтись малой кровью): есть 2 БД FIO и ACTIONS. В...

Выборка названий таблиц в массив
Делаю запрос, чтобы получить имена таблиц по маске/регулярке. $str = "show TABLEs LIKE...

Выбрать элементы из таблиц и записать их в массив
Как ВbIбрать елементbI из таблиц и записать их в масив? Тоисть есть кверя SELECT price FROM...

Не происходит выборка из БД
Доброго времени суток. Проблема заключается в следующем, при построении запроса типа "SELECT * FROM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru