I have a very long query with a lot of sub-queries in it (almost a thousand lines long).
What I want to do is to get the names of all the tables that are being used in the query. So take the following example of a query just to get an idea:
SQL Query
$sql = "SELECT
...,
...,
(
SELECT COUNT(t.id) AS t_count
FROM _user_just_a_table_db_ jat
WHERE ...
AND ...
AND ...
),
...,
...,
...
FROM _user_main_table_db_ tbl
LEFT JOIN _user_joining_table_db_ jt
ON jt.id = tbl.jt_id
WHERE ...
AND ...
AND tbl.id IN (
SELECT at.id
FROM _user_another_table_db_ at
WHERE at.active = 'Y'
)";
In this particular situation, I want to get maybe an array or a string with the following results:
just_a_table
main_table
joining_table
another_table
Notes
- Please note that the names of the table can appear multiple times. You may or may not worry about that as I can easily remove duplicates after getting the resulting
arrayorstring. - As you may have already noticed, the list of strings that I want to get will ALWAYS be in between
_user_and_db_.
(_user_.*?_db_)would get the full table name.Warning: preg_match(): Unknown modifier '('. Here's my code:preg_match('_user_(.*?)_db_/gm', $sql, $matches);.