@hesy

О чем говорит такой sql запрос?

Подскажите, что говорит следующий код:
$sql = "SELECT
    *
FROM
    history h
WHERE
    h.message = 'Blah-Blah'
AND
    h.context->>'current_user' = '$id'
";


Конкретно:
h.context->>'current_user' = '$id', именно знак "->>" что он значит?
history h - не нужно ли между ними запятая или это имеется ввиду по типу history AS h?
и для чего нужна буква h в message и context?

Правильно ли выглядит аналогичный запрос методом QueryBuilder?
$queryBuilder->select('*')
                     ->from('history', 't')
                     ->where('h.message = :message');
                     ->andWhere('h.context->>curent_user = :id')
                     ->setParameter('message', 'Blah-Blah')
                     ->setParameter('id', $id)
                     ->execute();
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега MySQL
h - это алиас к таблице history. Нужен, чтобы при указании столбца из таблицы в других частях запроса не писать слово "history" целиком.
->>' - это получение данных из поля, в котором записан json-объект (подробнее в документации: https://dev.mysql.com/doc/refman/8.0/en/json.html)

Правильно ли выглядит аналогичный запрос методом QueryBuilder?

Нет, вы потеряли кавычки и вторую "r" в слове "current". Должно быть так:
->andWhere('h.context->>"current_user" = :id')


Подскажите, что говорит следующий код:

Вычитать данные всех столбцов из таблицы "history". Искать только строки, в которых значение поля "message" равно "Blah-Blah", а также значение параметра "current_user" json-объекта, хранящегося в поле "context", равно переменной "$id"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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