@leopardo11

Можете объяснить этот MySQL запрос?

Можете объяснить, как это работает? Что откуда берется, куда присваивается?
SELECT r.*, u.username, u.fullname, u.avatar, IF (t.`type` is NULL, 'none', t.`type`) `type`
			FROM `{$iaCore->iaDb->prefix}reviews_clicks` r
				LEFT JOIN `{$iaCore->iaDb->prefix}members` u ON (u.`id` = r.`member_id`)
				LEFT JOIN `{$iaCore->iaDb->prefix}reviews_likes` t ON (t.`review_id` = r.`id` AND (t.`member_id` = '$userId' AND t.`member_id` != 0 OR t.`session_id` = '$sessionId'))
			WHERE r.`review_id` = '{$review['id']}' AND r.`item` = '$item' AND r.`status` = 'active'
			ORDER BY r.`date_added` DESC
			LIMIT "
  • Вопрос задан
  • 2294 просмотра
Решения вопроса 2
kawabanga
@kawabanga
Да легко

- SELECT r.*, ....
Выборка параметров из полученной выборки

FROM `{$iaCore->iaDb->prefix}reviews_clicks` r
из какой таблицы, где {$iaCore->iaDb->prefix} - это переменная php, а "r" - это алиас для таблицы

LEFT JOIN `{$iaCore->iaDb->prefix}members` u ON (u.`id` = r.`member_id`)
LEFT JOIN

далее идут два джоина, которые работают только в том случае, если данные в таблицах `{$iaCore->iaDb->prefix}members` и `{$iaCore->iaDb->prefix}reviews_likes` присутствуют. (гугли left join) , после каждого джоина срабатывает функция связки (ON (u.`id` = r.`member_id`))

далее блок where - это условие
далее блок order by - сортиврока
limit - это кол-во строк, которые нужно забрать .

Но вот вопрос, разве это так сложно самому было прочитать за 15-20 минут?
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Этот запрос строит одну большую строчку из трех таблиц.
Сначала берет строчку из reviews_clicks, и дописывает к ней строчку из members по условию
members.`id` = reviews.`member_id`
дальше точно так же дописывается строчка из reviews_likes
и так для каждой строчки в reviews_clicks, подходящей под условие в WHERE

А еще из этого запроса берется SQL инъекция.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы