我做了一個依賴於一堆內部選擇的查詢[因爲當我邏輯地在我們龐大的數據庫中查詢查詢的關係時,它使「邏輯」感]。用一些內部選擇重新加入MySQL查詢加入
但是,現在我想重構我的查詢以使用JOIN
s代替,因爲我在博客上閱讀了嵌套選擇不利於可讀性。
/**
* Returns the city area ID based on the dish
* @param $dish_id ID of the dish
* @return mixed City area ID
*/
public function getCityAreaByDishId(
$dish_id
) {
$query = $this->db->query("
SELECT
m.city_area_id as city_area_id
FROM menus m
WHERE m.id = (
SELECT c.menu_id
FROM oc_category c
WHERE category_id = (
SELECT oc.category_id
FROM oc_category c
LEFT JOIN oc_category oc
ON (c.parent_id = oc.category_id)
WHERE c.category_id = (
SELECT ptc.category_id
FROM oc_product_to_category ptc
WHERE ptc.product_id = $dish_id
)
)
);
");
return $query->row['city_area_id'];
}
我是MySQL的初學者,我想在開始時形成一些良好的習慣。有人可以幫我或給我一些關於如何重構這個更好的可讀性的提示嗎?
謝謝。
您確定您必須在此行使用'LEFT JOIN'而不是'JOIN' LEFT JOIN oc_category oc'嗎? – Hovo 2014-12-19 06:27:08
我的意思是說'JOIN',我的不好。 – theGreenCabbage 2014-12-19 06:28:26