sqlite / php - 按'输入顺序'排序 - 带有内爆查询

时间:2016-12-19 07:17:44

标签: php sqlite search sql-order-by

元。

$qtwo = str_split_unicode($q); 
$arrlength = count($qtwo);

然后我得到了:

$where = array();
foreach ( $qtwo as $word ) {
$where[] = "CHS LIKE '%" . $word . "%'";
}
$where = implode(' OR ', $where);    

if ($q[0] == "#")  {
} else {$results4 = $db->query("SELECT * FROM FOUR WHERE $where");
while ($row4 = $results4->fetchArray()) {

然后是一堆回声等 - 但结果按字母顺序返回 - 先到先得,例如:

隔山买老牛

回来了

  

--------------------------

     

“现代汉语方言音库•成都话音档”

     

词语:隔

     

发音:ge2

     

国际音标:ke²¹

     

--------------------------

     

“现代汉语方言音库•成都话音档”

     

词语:买

     

发音:mai3

     

国际音标:mai⁵³

     

--------------------------

     

“现代汉语方言音库•成都话音档”

     

词语:老

     

发音:lao3

     

国际音标:nau⁵³

     

--------------------------

     

“现代汉语方言音库•成都话音档”

     

词语:牛

     

发音:niu2

     

国际音标:ȵiəu²¹

     

--------------------------

     

“现代汉语方言音库•成都话音档”

     

词语:山

     

发音:san1

     

国际音标:san⁵⁵

对于任何发现中国外国人的人来说,就像搜索:GSMLN并按字母顺序获取结果:GMLNS

我的目标是让(输出)顺序与输入(顺序)相同。

我可以使用简单的订单吗?还是变得更复杂?

1 个答案:

答案 0 :(得分:1)

在SQL中,表总是无序的;无法保证查询使用任何特定订单。

如果要按特定顺序获取行,则必须在查询中使用ORDER BY对它们进行显式排序。

如果没有可以直接用于排序的表数据,则必须使用CASE expression将表值映射到可用于排序的某些值:

SELECT ...
ORDER BY CASE WordColumn
         WHEN '隔' THEN 1
         WHEN '山' THEN 2
         WHEN '买' THEN 3
         WHEN '老' THEN 4
         WHEN '牛' THEN 5
         END;