2013-10-10 73 views
1

在我的數據庫,我有這樣的話: AA,AB,AC,AD,AE,AF,AGPHP/MySQL的:如何前後搜索項目後顯示的話

我搜索「AD 「爲:

<form method="post" action="AF9.php"> 
     <input type="submit" name="submit" value="search"> 
     <input type="text" name="search" /> 
</form> 

我想按字母順序對數據庫中的所有單詞進行排序。然後只顯示搜索到的值(即AD)以及之前的單詞和之後的單詞。事情是這樣的:

  • AC
  • AD
  • AE

這是我到目前爲止寫(你的幫助是極大的讚賞):

<?php 
include('includes/db_AF.php'); //includes the db credentials 
$connection = @new mysqli(HOSTNAME, MYSQLUSER, MYSQLPASS, MYSQLDB); 
if ($connection->connect_error) { 
    die('Connect Error: ' . $connection->connect_error); 
} else { 

    $search=$_POST["search"]; 

    $query="SELECT word FROM wordtable2 
    WHERE word like '%' 
    ORDER BY word ASC"; // I am sorting all the words in the database      

    $result_obj = ''; 
    $result_obj = $connection->query($query);   

    while($result = $result_obj->fetch_array(MYSQLI_ASSOC)) { 
    $items[] = $result; 
    }        

    foreach ($items as $item) { 
    echo $item['word']; //Here I need to echo the results, but don't know how to 
    } 
} 
?> 
+0

你可能必須要查詢的下一個和以前的話。 '從wordtable2中選擇單詞WHERE word <? ORDER BY word DESC LIMIT 1'和'SELECT word FROM wordtable2 WHERE word>?按字ASC LIMIT 1'命令。除此之外,您也可以通過獲取行號和查詢rownumber-1限制3來解決問題。 –

+0

感謝您的意見,它的工作原理。 –

回答

2

在SQL中可能有一種更優雅的方式來做到這一點,但我能想到的最簡單的方法實際上涉及兩個查詢。

使用你的榜樣......

可以說你的數據庫具有以下條目

AA, AB, AC, AD, AE, AF 

追隨你的例子,你有值AD,你想中檢索AC和AE。

首先,做這樣的查詢...

SELECT word FROM wordtable2 
    WHERE word > 'AD' 
    ORDER BY word ASC 
    LIMIT 1; 

然後做這樣的查詢...

SELECT word FROM wordtable2 
    WHERE word < 'AD' 
    ORDER BY word DESC 
    LIMIT 1; 
+0

輝煌,謝謝! –

0

我想你想說的是這樣的:

echo $items[$item]; 

如果在foreach()循環的上下文中使用,它將在$ items數組中顯示每個單詞。