Можно ли средствами MySQL отсортировать поле с ценами если в полях есть буквы с названиями валют ... например "15 руб" или "27 usd" или же надо чистить базу что бы там остались только цифры?
Попробуйте, всё должно сортировать, но при проектировании базы данных, валюту лучше указывать отдельно
Можно. Но не просто. Сейчас у Вас это строка, поэтому упорядочиваться будет как строка, а не как числа. Т.е. нужно получить число из строки, привести к нужному типу и по этому уже сортировать, тогда будет работать правильно. Но лучше(правильно) разбить на два поля - "сумма, валюта", как советовал metadon.
и еще можно сделать отдельное поле рублевых цен для позиций с валютными ценниками. и обновлять там цену с учетом курса цб. тогда сортировка не будет зависеть от валюты
Если у вас между ценой и валютой есть символ разделитель, то во время сортировки откидывайте валюту, оставляя числовую часть. С другой стороны просто сортировать величину в разными валютами тоже не корректно, т.к. валюта не равнозначна. В этом случае для корректной сортировки всё приводить к единой валюте и от этого критерия отталкиваться.
а как сделать в MySQL соритровку только почислу? Скажем ORDER BY 'price' если в прайсе: 15 руб 27 руб. 11 р Добавлено спустя 2 минуты 23 секунды: А вообще я решил все же разделить колонку price на две - в прайсах останутся только цифры (кстати как отследить что бы туда заносились только цифры) и будет колонка currency и там будет текстовое значение валюты. Вопрос как мне через регулярное выражение разделить строку типа "12,5 руб" что бы было 12,5 и "руб"? Добавлено спустя 8 минут 37 секунд: А что означает если в поле с ценой через phpMyAdmin выдает "#REF!" тип поля varchar(100) и нужно ли поменять тип поля с varchar(100) на какой то другой? (какой?) или оно и так будет искать?
Вот регулярка. Изучал регулярки не очень глубокого. Но вот примерное решение function getFloatMoney($money){ $expr = "/(\d+[\.|\,]*\d*)\s*(\D*)/xsi"; preg_match($expr, $money, $packet); return $packet; } Функция разбивает на число и единицу измерения "12,5 руб" будет 12,5 и руб Разделителем дробной части от целой взял точку или запятую при этом число может быть целым. в $packet[1] = 12,5 $packet[2] = 'руб' После разделения величины от единицы измерения можно с данными проводить любые манипуляции