У меня есть 2 колонки, какMysql фильтр запроса, где условие
name price
a|b|c 100|200|150
x|y|z 150|100|160
Здесь я хочу, чтобы получить цену, где цена> 150. Я не знаю, как взорваться? Спасибо
У меня есть 2 колонки, какMysql фильтр запроса, где условие
name price
a|b|c 100|200|150
x|y|z 150|100|160
Здесь я хочу, чтобы получить цену, где цена> 150. Я не знаю, как взорваться? Спасибо
Вы не можете взорваться в MySQL. Я настоятельно рекомендую вам реструктурировать таблицу как реляционную (т. Е. Каждое имя и цена должны занимать одну строку).
Возможно, возможно сделать некоторый тип численного сравнения с помощью подстрок, но я думаю, было бы намного проще просто запросить всю таблицу и фильтровать результаты через php (предположим, вы используете php, так как вы сказали explode
, который обычно называется split
на других языках).
foreach ($rows as $row) {
$names = explode("|", $row["name"]);
foreach (explode("|", $row["price"] as $idx => $price) {
if ($price > 150) {
$all_names[] = $name[$idx];
}
}
}
Это, конечно, предполагает, что индексы столбца имен/цен совпадают правильно. Это также дорого, поскольку он должен запрашивать всю таблицу и не использует никаких (MySQL) индексов.
Для нормализации данных, что вы могли бы сделать, это есть таблица Groups
, которая имеет groupID
. Затем у вас есть текущая таблица с кортежем GroupID, name, price
. Ваши данные будут выглядеть следующим образом:
groupID name price
1 a 100
1 b 200
1 c 150
2 x 150
2 y 100
2 z 160
Тогда вы можете просто проверить WHERE price > 150
, который был бы очень быстро, если price
были проиндексированы. Это также позволит вам выполнять поиск по группе - в некоторых случаях это может быть полезно и даже быстрее.
Чтобы настроить таблицу выше, исходя из того, что у вас уже есть, вам нужно будет запросить всю таблицу, а затем explode
имя/цену и вставить соответствующим индексом с существующим идентификатором группы.
http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a-mysql-query http://stackoverflow.com/questions/5928599/equivalent- of-explode-to-work-with-strings-in-mysql –
1. Нормализуйте свои данные – Strawberry
Здравствуйте, Jaywalker anti-pattern! Вместо того, чтобы пытаться использовать значения, разделенные разделителями при создании запроса, вы должны разделить свои значения и сохранить их в связанной таблице - и это решит все проблемы раз и навсегда –