У меня есть 2 таблицы с именами categories
и products
с этим соотношением:
categories.category_id
= products.product_category_id
Я хочу показать все категории с 2 из них!
[
[category 1] =>
[
'category_id' => 1,
'category_title' => 'category_title 1',
[products] => [
'0' => [
'product_category_id' => 1,
'product_id' => 51,
'product_title' => 'product_title 1',
],
'1' => [
'product_category_id' => 1,
'product_id' => 55,
'product_title' => 'product_title 2',
]
]
],
[category 2] =>
[
'category_id' => 2,
'category_title' => 'category_title 2',
[products] => [
'0' => [
'product_category_id' => 2,
'product_id' => 32,
'product_title' => 'product_title 3',
],
'1' => [
'product_category_id' => 2,
'product_id' => 33,
'product_title' => 'product_title 4',
]
]
],
...
]
Я красноречивый Laravel Я могу использовать что-то вроде этого:
$categories = Category::with(['products' => function($q) {
$q->limit(2)
}])->get();
Но я не использую Laravel и мне нужен чистый код SQL!Я пробовал этот код:
SELECT
CT.category_id,
PT.product_category_id,
CT.category_title,
PT.product_id,
PT.product_title
FROM
categories CT
LEFT JOIN(
SELECT
*
FROM
products
LIMIT 2
) AS PT
ON
CT.category_id = PT.product_category_id
WHERE
CT.category_lang = 'en'
Но есть проблема с этим кодом!Кажется, что MYSQL сначала получает 2 первые строки в таблице products
, а затем пытается получить LEFT JOIN
от categories
до этих 2 строк!и это вызывает возврат null
значений для продуктов (хотя, если я удаляю LIMIT
, это прекрасно работает, но мне нужно LIMIT
)
Я также проверял этот код: ( ОБНОВЛЕНО )
SELECT
CT.category_id,
PT.product_category_id,
CT.category_title,
PT.product_id,
PT.product_title
FROM
categories CT
LEFT JOIN(
SELECT
*
FROM
products
WHERE
product_category_id = CT.category_id
LIMIT 5
) AS PT
ON
CT.category_id = PT.product_category_id
WHERE
CT.category_lang = 'en'
Но я получил эту ошибку:
1054 - Неизвестный столбец 'CT.category_id' в 'выражении where'
Я не могу получить доступ к CT.category_id
в подзапросе.
Какое лучшее решение?