[英]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.