Получить наибольшее значение в сериализованных данных с php в MySQL столбце - PullRequest
1 голос
/ 10 ноября 2009

Какой способ получить наибольшее значение в сериализованных данных. Например, у меня есть это в моей колонке «рейтинг»:

a:3:{s:12:"total_rating";i:18;s:6:"rating";i:3;s:13:"total_ratings";i:6;}

Как я могу выбрать 3 самых больших «рейтинга» с запросом?

Большое спасибо

1 Ответ

4 голосов
/ 10 ноября 2009

Вы, вероятно, просматриваете кучу вызовов SUBSTRING_INDEX(field,':',@offset), если хотите сделать это в SQL. Это было бы очень ужасно. Хранение сериализованной версии объекта в БД - это удобство для постоянного хранения, но его не следует считать постоянным методом хранения. Если вы настаиваете на использовании сериализованной строки для запросов, вы потеряли всю мощь реляционной БД, и вы также можете хранить строки в текстовом файле.

Наилучший вариант - использовать сериализованную строку только для персистентных целей (например, для запоминания того, что пользователь делал в последний раз, когда он посещал), и хранить данные, необходимые для расчетов, в правильно нормализованных полях и таблицах. Тогда вы можете легко запросить то, что вам нужно знать.

Другой вариант - выбрать все строки 'rating' из строк, чьи поля соответствуют определенным другим критериям (например, поле date_added относится к последней неделе), заново создать все объекты на уровне приложения и сравнить их там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...