За последние 24 часа нас посетили 18786 программистов и 1637 роботов. Сейчас ищут 976 программистов ...

Сортировка по цене если в поле цены есть буквы

Тема в разделе "PHP и базы данных", создана пользователем sumsum, 7 окт 2014.

  1. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Можно ли средствами MySQL отсортировать поле с ценами если в полях есть буквы с названиями валют ... например "15 руб" или "27 usd" или же надо чистить базу что бы там остались только цифры?
     
  2. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Попробуйте, всё должно сортировать, но при проектировании базы данных, валюту лучше указывать отдельно
     
  3. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Можно. Но не просто. Сейчас у Вас это строка, поэтому упорядочиваться будет как строка, а не как числа. Т.е. нужно получить число из строки, привести к нужному типу и по этому уже сортировать, тогда будет работать правильно.
    Но лучше(правильно) разбить на два поля - "сумма, валюта", как советовал metadon.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    и еще можно сделать отдельное поле рублевых цен для позиций с валютными ценниками. и обновлять там цену с учетом курса цб. тогда сортировка не будет зависеть от валюты
     
  5. _StivenRain

    _StivenRain Новичок

    С нами с:
    1 фев 2014
    Сообщения:
    5
    Симпатии:
    0
    Если у вас между ценой и валютой есть символ разделитель, то во время сортировки откидывайте валюту, оставляя числовую часть. С другой стороны просто сортировать величину в разными валютами тоже не корректно, т.к. валюта не равнозначна. В этом случае для корректной сортировки всё приводить к единой валюте и от этого критерия отталкиваться.
     
  6. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    а как сделать в MySQL соритровку только почислу? Скажем ORDER BY 'price' если в прайсе:
    15 руб
    27 руб.
    11 р

    Добавлено спустя 2 минуты 23 секунды:
    А вообще я решил все же разделить колонку price на две - в прайсах останутся только цифры (кстати как отследить что бы туда заносились только цифры) и будет колонка currency и там будет текстовое значение валюты.

    Вопрос как мне через регулярное выражение разделить строку типа "12,5 руб" что бы было 12,5 и "руб"?

    Добавлено спустя 8 минут 37 секунд:
    А что означает если в поле с ценой через phpMyAdmin выдает "#REF!" тип поля varchar(100)
    и нужно ли поменять тип поля с varchar(100) на какой то другой? (какой?) или оно и так будет искать?
     
  7. _StivenRain

    _StivenRain Новичок

    С нами с:
    1 фев 2014
    Сообщения:
    5
    Симпатии:
    0
    Вот регулярка. Изучал регулярки не очень глубокого. Но вот примерное решение

    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] = 'руб'
    После разделения величины от единицы измерения можно с данными проводить любые манипуляции