Это интересный пример. Лучше отформатирован:
SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video, type as t INNER JOIN
user
ON video.seller = user.id
WHERE video.type2 = t.id AND
thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10
Вопрос заключается в столбцы video
не понял, в остальной части статьи, из-за ,
from
. Так работает запятая. Интересно, что это может быть исправлено только путем замены ,
с его логическим эквивалентом cross join
:
SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video cross join type as t INNER JOIN
user
ON video.seller = user.id
WHERE video.type2 = t.id AND
thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10
Это объясняется в documentation и причина преимущество. Запятая имеет более низкий приоритет, чем cross join
. Таким образом, соединения в вашем выражении оцениваются как «объединение видео (тип join user)». Поскольку второе соединение интерпретируется первым, столбцы в video
не известны.
Однако, есть на самом деле присоединиться на столе, так что лучше записать в виде:
SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video join
type t
on video.type2 = t.id INNER JOIN
user
ON video.seller = user.id
WHERE thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10
У вас есть столбец «продавец» в таблице «видео»? – faffaffaff
да вот почему я поставил первый запрос :) –
почему вы смешиваете синтаксис JOIN? –