Правильная схема / запрос для записей «X и выше»

Извините за запутанное название, не мог придумать лучшего. Позвольте мне объяснить на примере. Существует две таблицы, одна содержит список операционных систем, а другая содержит список различных версий этих операционных систем. Следующая картина прояснит это.
введите описание изображения здесь

Я могу получить элементы, которые принадлежат / связаны с конкретным os_version, выполнив запрос к нему, как select * from items where os_versions.id = 3, Однако я также хочу сделать запрос наподобие Android 3.0+, что будет означать Android 3.0 и выше, поэтому этот запрос будет извлекать все элементы с os_version с идентификаторами 3,4,5 и 6 (см. Таблицу). Какой лучший способ сделать это? Можно ли это сделать на самой БД с какими-то изменениями в дизайне таблицы или лучше сделать это в кодах? сейчас я поддерживаю массив для поиска, какие os_versions для pullup для запроса с +, но это выглядит грязно. Какие-либо предложения? Благодарю.

0

Решение

Нет причин сохранять версию в виде строки — вы можете сохранить ее как число, а затем запросить ее, используя математические операторы:

CREATE TABLE OperatingSystem (
id INT PRIMARY KEY,
os VARCHAR(20) NOT NULL
);

CREATE TABLE OS_Versions (
id INT PRIMARY KEY,
os_id INT NOT NULL,
os_version DECIMAL NOT NULL,
CONSTRAINT os_id_fk FOREIGN KEY REFERENCES OperatingSystems (id)
);

Чтобы получить все андроиды выше 3.0:

SELECT CONCAT(os, ' ', FORMAT(os_version, 1))
FROM   OperatingSystem os
JOIN   OS_Versions osv ON os.id = osv.os_id
0

Другие решения

Это должно быть в запросе?

Эта функция в PHP будет выполнять сравнение версий, вы можете использовать ее в пользовательском фильтре после выполнения запроса, возможно, сначала просто извлекая весь этот конкретный os_id.

http://php.net/manual/en/function.version-compare.php

В противном случае этот вопрос может дать вам некоторые идеи о том, как обращаться с ним на уровне запроса:

Как сравнить версию строки ("x.y.z") в MySQL?

0

По вопросам рекламы [email protected]