正確なテーブル構造を知らなくても、次のようなものを提案します。
SELECT
stores.name AS name,
addresses.street AS street,
addresses.city AS city,
'store' AS type,
GROUP_CONCAT(categories.categoryname) AS category
FROM
stores
INNER JOIN
addresses ON addresses.addressid = stores.storeid
INNER JOIN
categories AS categories.storeid = stores.storeid
WHERE
stores.name LIKE "ac%"
GROUP BY
stores.storeid
UNION
SELECT
brands.name AS name,
'-' AS street,
'-' AS city,
'brand' AS type,
GROUP_CONCAT(brandcategories.categoryname) AS category
FROM
brands
INNER JOIN
brandcategories AS brandcategories.brandid = brands.brandid
WHERE
brands.name LIKE "ac%"
GROUP BY
brands.brandsid
UNION
SELECT
malls.name AS name,
addresses.street AS street,
addresses.city AS city,
'mall' AS type,
'-' AS category
FROM
malls
INNER JOIN
addresses ON addresses.addressid = malls.mallid
WHERE
malls.name LIKE "ac%"
GROUP BY
malls.mallid
SELECT...
テーブルごとにaを実行し、それらを UNION します。各 SELECT は columntype
を取得します。type は store、brand、または mall です。したがって、後で PHP コードで区別できます。
UNION 内のすべての SELECT は同じ列を必要とするため、ブランドなどの SELECT もアドレスを返しますが、それは空です。
この例では、すべてのストア/ブランドが複数のカテゴリを持つことができ、カンマ区切りのフィールド ( GROUP_CONCAT(categories.categoryname)
) で一度に返されます。