簡體   English   中英

SELECT DISTINCT多字段搜索?

[英]SELECT DISTINCT multiple field search?

我正在嘗試搜索多個字段(zc_city,zc_zip和zc_state),以與用戶輸入的單個值匹配。 結果中應包括三列。 這是我現在所擁有的:

$q = strtolower($_GET["q"]);
if (!$q) return;

$sql = "SELECT DISTINCT zc_city AS zcity FROM search_zipcodes WHERE zc_city LIKE '$q%'";

$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
    $zcity = $rs['zcity'];
    echo "$zcity\n";
}

該表具有以下結構:

CREATE TABLE search_zipcodes (
  zc_zip VARCHAR(5),
  zc_lat FLOAT,
  zc_lon FLOAT,
  zc_city VARCHAR(80),
  zc_state CHAR(2) 
);

聽起來好像您只是在要求一個OR:

$sql = "SELECT zc_city, zc_state, zc_zip FROM search_zipcodes WHERE zc_city LIKE '$q%' OR zc_state LIKE '$q%' OR zc_zip LIKE '$q%' ";

我仍然不確定您是否已聲明此表上的主鍵。 如果是Zip或Zip + City,則無需使用DISTINCT 如果您可以為同一個城市,州和郵政編碼輸入多個條目,則可以使用GROUP BY如下所示:

$sql = "SELECT zc_city, zc_state, zc_zip FROM search_zipcodes WHERE zc_city LIKE '$q%' OR zc_state LIKE '$q%' OR zc_zip LIKE '$q%' GROUP BY zc_city, zc_state, zc_zip ";

編輯您可以查找有關從查詢中獲取結果的更多信息,但是您可以嘗試以下操作:

while ( $rs = mysql_fetch_assoc($rsd) ){
    $array[] = $row;
}

要么

這會將結果填充到一個數組中,該數組的每個條目都是列值的數組,並刪除最后一個始終為空的數組。

while ( ($resultArray[] = mysql_fetch_assoc($rsd) ) || array_pop( $resultArray ) );

要返回至少匹配一列的行,請使用OR

SELECT zc_city AS city, zc_state AS state, zc_zip AS zip
  FROM search_zipcodes
  WHERE zc_city LIKE :city OR zc_zip=:zip

作為准備好的查詢,它看起來像:

// connect to the DB. Should be in its own function to isolate credentials.
$db = new PDO(...);

// get the cities. Should be in a function/method to access DB (the data access layer).
$findPlace = $db->prepare("SELECT zc_city AS city, zc_state AS state, zc_zip AS zip
      FROM search_zipcodes
      WHERE zc_city LIKE :city OR zc_zip=:zip");
$places = $findPlace->execute(array(':city' => $_REQUEST['q'] . '%', 
                                    ':zip' => $_REQUEST['q']));

// display places. Should be in a method of a view class.
?>
  <ul>
    <?php foreach ($places as $place) {
       echo "<li>$place[city], $place[state] $place[zip]</li>\n";
    } ?>
  </ul>

注意,有三個不同的任務用注釋來描述。 每個應屬於一個單獨的類,前兩個應與第三個(體系結構層,例如Model-View或Model-View-Controller )位於一個單獨的層(數據訪問層)中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM