2013-09-03 2 views
0

Мне нелегко решить эту загадку. У меня есть веб-сайт, на котором показаны некоторые продукты. Я пытаюсь показать продукт по заказу ASC, но он работает неправильно.PHP Order By Issue

Вот мой текущий запрос и вывод:

$sql=executeQuery("select * from ".PREFIX."prod_info where prodId='".$pId."' order by ProductName+0) ASC"); 


AM 65 
AM 67 
AM 69 
AM 104 (Chuck) 
AM 105 (Sin) 
AM 73 
AM 76 
AC 20 

Любая помощь будет оценена

+0

измените ваш вопрос, чтобы показать пример вывода вы ожидающую – victorantunes

ответ

0

Вы должны иметь:

order by ProductName 

Вместо:

order by ProductName+0 

В латте r преобразует ProductName в целое число. Если он начинается с буквы, тогда он будет обрабатываться как 0. Что, вероятно, происходит, так это то, что все начинаются с букв, все упорядочиваются по значению 0 - и ничего интересного не происходит.

EDIT:

Вы кажетесь хотите заказать ProductName в алфавитном порядке первыми двумя цифрами, а затем численно остальными. Вы можете сделать это так:

order by left(ProductName, 2), 
     char_length(ProductName), 
     ProductName 

Если у вас действительно есть лишние слова в конце концов, после числа, то это становится все труднее. Следующий может работать лучше:

order by left(ProductName, 2), 
     substr(ProductName, 3) + 0, 
     ProductName 
+0

Спасибо за ваш ответ. Я попытался, но он не работает. Выход AM 139, AM 140, AM 141, AM 142, AM 16, AM 2 – ncksteven

+0

Хорошо. Большой! Второй вариант решил мою проблему. В очередной раз благодарим за помощь. – ncksteven