Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка в порядке уменьшения
 
 автор: Diplex   (16.07.2010 в 14:00)   письмо автору
 
 

Всем привет. Есть небольшое голосование по технологии "+" и "-", а в итоге выводится конечный результат с учётом знака + или -. Соответственно, в БД записываются значения "+338", "-488" и т.д.
Как вывести значения в порядке уменьшения, учитывая эти + и - ? Может как-то поля настроить?

  Ответить  
 
 автор: sms-send   (16.07.2010 в 14:02)   письмо автору
 
   для: Diplex   (16.07.2010 в 14:00)
 

ORDER BY `поле со значением` DESC

  Ответить  
 
 автор: Trianon   (16.07.2010 в 14:46)   письмо автору
 
   для: Diplex   (16.07.2010 в 14:00)
 

а + то зачем?
Без плюса число положительным не окажется чтоли?

  Ответить  
 
 автор: sim5   (16.07.2010 в 14:52)   письмо автору
 
   для: Trianon   (16.07.2010 в 14:46)
 

>а + то зачем?

для усиления положительности. :)

  Ответить  
 
 автор: Diplex   (16.07.2010 в 14:53)   письмо автору
 
   для: Trianon   (16.07.2010 в 14:46)
 

to sms-send:
Я пробовал такой запрос:
mysql_query("SELECT * FROM `lyr` ORDER BY `balall` DESC LIMIT 20");

Сортирует неправильно, с минусом лезут вверх, всё в разнобой.

to Trianon and sim5:
У меня просто в итоге значение из поля выводится на страницу, и нужно выводить с + или минусом, и делать доп проверку и подставлять "+" глупо, если удобно хранить конечный результат в бд.


Почему неправильно сортирует?

  Ответить  
 
 автор: sms-send   (16.07.2010 в 14:57)   письмо автору
 
   для: Diplex   (16.07.2010 в 14:53)
 

Возникло подозрения, что `balall` какого то совсем не такого типа.
INTEGER или другой целочисленный тип должен подойти. А форматированием вывода должен заниматься клиент (это насчёт плюса).

> и делать доп проверку и подставлять "+" глупо
Нееет, глупо это как сейчас.

  Ответить  
 
 автор: Trianon   (16.07.2010 в 15:00)   письмо автору
 
   для: Diplex   (16.07.2010 в 14:53)
 

тип переменной должен быть числовым.
БД никогда не нацеливают на хранение именно конечных результатов.
Конечной предобработкой обычно занимается уровень приложения.
Хотя можно и в SELECT эту условную операцию загнать.
Но хранить плюс, равно как и хранить число в виде текста - ересь мерзкая.

  Ответить  
 
 автор: Diplex   (16.07.2010 в 15:04)   письмо автору
 
   для: Trianon   (16.07.2010 в 15:00)
 

Сделал тип поля TINYINT, выводит правильно, но убивает "+", т.е. число выводится без плюса, но если отрицательное число, то минус выводится.
Если такой тип подходит, то как лучше всего проверить положительность числа? Резать первый символ, если это минус, то ничего не делать, если что-то другое, то подставлять плюс? Или есть какая-то спец функция для подставки плюса к положительному числу?

  Ответить  
 
 автор: sms-send   (16.07.2010 в 15:10)   письмо автору
 
   для: Diplex   (16.07.2010 в 15:04)
 

<?php
$n 
sprintf('%+d'$n);

<?php
if($n<0)
    
$n '+'.$n;

  Ответить  
 
 автор: Diplex   (16.07.2010 в 15:12)   письмо автору
 
   для: sms-send   (16.07.2010 в 15:10)
 

Спасибо! А нет информации, какой метод быстрее, а то у меня нет возможности проверить на сервере, т.к. он нагружен пользователями... :)

  Ответить  
 
 автор: sms-send   (16.07.2010 в 15:14)   письмо автору
 
   для: Diplex   (16.07.2010 в 15:12)
 

На фоне выполнения запроса к базе пользователи разницы не заметят.

  Ответить  
 
 автор: Diplex   (16.07.2010 в 15:16)   письмо автору
 
   для: sms-send   (16.07.2010 в 15:14)
 

Ок, понял, спс!

  Ответить  
 
 автор: sms-send   (16.07.2010 в 15:19)   письмо автору
 
   для: Diplex   (16.07.2010 в 15:16)
 

Кстати, sprintf перед 0 выведет "+", если не нужен, то использовать второй вариант.

  Ответить  
 
 автор: Diplex   (16.07.2010 в 15:25)   письмо автору
 
   для: sms-send   (16.07.2010 в 15:19)
 

Спасибо, что написали, а то начал использовать первый вариант уже))

  Ответить  
 
 автор: sms-send   (16.07.2010 в 15:28)   письмо автору
 
   для: Diplex   (16.07.2010 в 15:25)
 

... а во втором варианте я очепятался =(

<?php 
if($n>0
    
$n '+'.$n;

  Ответить  
 
 автор: Diplex   (16.07.2010 в 15:31)   письмо автору
 
   для: sms-send   (16.07.2010 в 15:28)
 

Это я уже заметил)) Спасибо за заботу))

  Ответить  
 
 автор: Trianon   (16.07.2010 в 21:48)   письмо автору
 
   для: Diplex   (16.07.2010 в 15:12)
 

>Спасибо! А нет информации, какой метод быстрее, а то у меня нет возможности проверить на сервере, т.к. он нагружен пользователями... :)

Обычно в такой ситуации проверку делают на собственной машине.

  Ответить  
 
 автор: Diplex   (17.07.2010 в 02:36)   письмо автору
 
   для: Trianon   (16.07.2010 в 21:48)
 

У меня собственная машина работает как сервер, который доступен из интернета и на который заходят посетители. Поэтому все измерения будут неверны...

  Ответить  
 
 автор: Trianon   (17.07.2010 в 05:20)   письмо автору
 
   для: Diplex   (17.07.2010 в 02:36)
 

кто ж Вам мешает сделать по-людски...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования