Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605

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

15.07.2013, 19:48. Показов 1069. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2013, 19:48
Ответы с готовыми решениями:

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

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

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

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

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

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

Не по теме:

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

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

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

Цитата Сообщение от sMockingbird Посмотреть сообщение
или я неправильно Вас понял?)
Я, в свою очередь, не очень понял Вас ... данный код не работает, хотя бы потому, что $str - строка и скормить её циклу foreach не получается
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
16.07.2013, 17:17
Цитата Сообщение от jivot Посмотреть сообщение
неужели так сложно выцепить нужную информацию одной регуляркой из данной строки?
Задача изначально поставлена для какой-то конкретной строки, взятой с потолка. О расширяемости на другие строки ни слова не сказано. А вариантов - бесконечной количество.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2013, 17:17
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru