2013-12-11 47 views
0

我写了这个代码来显示从WordPress数据库表中DATAS HTML表格:排序VARCHAR整数首先在MySQL

global $wpdb; 
$table_name = $wpdb->prefix . 'mytable'; 
$stats = $wpdb->get_results("SELECT * FROM $table_name ORDER BY cast(alexacr as UNSIGNED) ASC"); 
$itemnum = $wpdb->get_var("SELECT COUNT(id) FROM $table_name"); 
echo '<span style="font-family: sans-serif;position:relative;float: left;font-size: 18px;"><em>'.$itemnum.' Sites</em></span>'; 
echo '<table>'; 
echo '<thead>'; 
echo '<th>Nome &amp; Link</th><th>Alexa CR</th>'; 
echo '</thead>'; 
echo '<tbody>'; 
foreach ($stats as $stat){ 
echo'<tr>'; 
echo '<td><a title="'.str_replace('_','',$stat->name).'" href="'.$stat->url.'" target="_blank">'.str_replace('_','',$stat->name).'</a></td><td>'.$stat->alexacr.'</td>'; 
echo'</tr>'; 
} 
echo '</tbody>'; 
echo '</table>'; 

alexacr列设置为varchar。 为alexacr列的结果是这样的:

N/A 
1 
2 
3 
4 

我怎么能只分选出的数字是这样的吗?

1 
2 
3 
4 
N/A 

谢谢。

+1

存储号码为号码,使用'NULL'为N/A可能? –

+0

你能解释一下吗,谢谢。 –

回答

1

尝试http://sqlfiddle.com/#!2/210007/1

更多细节LPAD

SELECT 
     * 
    FROM 
     Table1 
    Order By 
     CASE WHEN alexacr like 'N/A' then 1 else 0 end ASC, 
     LPAD(alexacr, 20, '0') ASC 

演示在http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lpad

+0

如果我用不同长度的数字替换1,2,3,4不起作用。谢谢。 –

+0

请尝试更新ans –

+0

我认为它的工作原理只有当我有最大3长度的数字,但如果我使用例如4580不工作。但现在我知道一个新的功能,谢谢。 –

1

试试这个:

ORDER BY alexacr ,alexacr *1 

编辑

我猜N/A是NULL所以

ORDER BY CASE WHEN alexacr IS NULL THEN 1 ELSE 0 END,alexacr 

SQL Fiddle

SQL Fiddle

+0

不适用结果随机数排序:1 4 3 2 N/A。 –

+0

@M先生我严重怀疑 – Mihai

+0

N/A不为空。当我尝试使用伟大的数字第一代码(1212,12632,2185,319)不起作用。谢谢。 –