我的问题是我需要[from => account_admin]
并且[join => ['LEFT JOIN account_admin_role_relation ON account_admin.id = account_admin_role_relation.admin_id', 'LEFT JOIN account_admin_role ON account_admin_role_relation.admin_role_id = account_admin_role.id']]
这是我的进步:
$query = '
SELECT account_admin.id, account_admin.name, email, account_admin_role.name AS role FROM account_admin
LEFT JOIN account_admin_role_relation ON account_admin.id = account_admin_role_relation.admin_id
LEFT JOIN account_admin_role ON account_admin_role_relation.admin_role_id = account_admin_role.id
WHERE status = 1
GROUP BY account_admin.id
';
$matches = null;
$regex_value = '(?:\w++|`[^`]*+`|"(?:[^"\\\\]++|\\\\.)*+"|\'(?:[^\'\\\\]++|\\\\.)*+\'|\s++|[^`"\'\w\s])*?';
preg_match('/^\s*(?:\bSELECT\b\s*(' . $regex_value . '))?(?:\bFROM\b\s*(' . $regex_value . '))?(?:\bWHERE\b\s*(' . $regex_value . '))?(?:\bGROUP\s+BY\b\s*(' . $regex_value . '))?(?:\bORDER\s+BY\b\s*(' . $regex_value . '))?(?:\bLIMIT\b\s*(' . $regex_value . '))?(?:;|$)/si', $query, $matches);
$parts = array_combine(['query', 'select', 'from', 'where', 'group', 'order', 'limit'], $matches + array_fill(0, 7, ''));
if (preg_match_all('/(LEFT|INNER|OUTER|RIGHT)?\sJOIN((?:(?!\sJOIN).)+)/i', 'FROM ' . $parts['from'], $matches)) {
$parts['join'] = $matches[0];
}
if (preg_match('/FROM\s+(.+)/i', 'FROM ' . $parts['from'], $matches)) {
$parts['from'] = $matches[1];
}
print_r($parts);
编辑:我只是寻找简单的数组作为输出因为我只是使用简单的查询选择..来自..加入..其中..组...订单..限制