I'm trying to break up a SQL statement so that I can can work on each segment individually.
This is the code I have so far.
$SQL = "SELECT *
FROM Table_1
INNER JOIN Table_2 ON Table_1.ID=Table_2.Table_1_ID
JOIN Table_3 ON Table_1.ID=Table_3.Table_1_ID
LEFT OUTER JOIN Table_4 ON Table_3.ID=Table_4.Table_3_ID
WHERE Field1='BLAH' AND Field2 IN ('1', '2', '3')
GROUP BY Field1, Field2
HAVING Field3='CHOO'
ORDER BY Field1, Field2 ";
$test = preg_split('/(select|from|(.*)join|where|group by|having|order by)/im', $SQL, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
var_dump($test);
This is the result:
array
0 => string 'SELECT' (length=6)
1 => string ' *
' (length=
2 => string 'FROM' (length=4)
3 => string ' Table_1
' (length=10)
4 => string ' INNER JOIN' (length=14)
5 => string ' INNER ' (length=10)
6 => string ' Table_2 ON Table_1.ID=Table_2.Table_1_ID
' (length=43)
7 => string ' JOIN' (length=
8 => string ' ' (length=4)
9 => string ' Table_3 ON Table_1.ID=Table_3.Table_1_ID
' (length=43)
10 => string ' LEFT OUTER JOIN' (length=19)
11 => string ' LEFT OUTER ' (length=15)
12 => string ' Table_4 ON Table_3.ID=Table_4.Table_3_ID
' (length=47)
13 => string 'WHERE' (length=5)
14 => string ' Field1='BLAH' AND Field2 IN ('1', '2', '3')
' (length=50)
15 => string 'GROUP BY' (length=
16 => string ' Field1, Field2
' (length=21)
17 => string 'HAVING' (length=6)
18 => string ' Field3='CHOO'
' (length=20)
19 => string 'ORDER BY' (length=
20 => string ' Field1, Field2 ' (length=16)
As you can see it's sorta doing the right thing but I need it to only split before the keyword, instead of before and after as it is doing. It is also producing two results when there is an "Inner Join".
Can someone point out what I'm doing wrong?
Thanks,
Stu