sqlite であいまい検索をして郵便番号検索のアプリを作成していたときのことです。
なぜか一致した物が表示しない・・・・・・なぜ・・・おかしいな~
完全一致じゃなかったら表示されるし。。。これどーゆうこと?
スポンサーリンク
もともとは表示されていたのに出てこなくなった理由を考えてみました。
そこで検索したときにヒットしなかったら該当なしの表示をさせたのがそもそもの始まりだったのです。
条件分岐にて上に記述したら駄目だよね~。LIMIT100つけて検索した99件ヒットあれ?
なんでだろ?そもそも該当なしの記述自体で1件減らされているわけです。
それに気づくまでかな~り時間を要しましたよ。
あれやこれやとかまっていくうちに、ひょっとしてこれ?これじゃないよね、これじゃないよね~~~!
だからもともとの検索している時点で1件減っていることに気がつきませんでしたよ。
$stt = $pdo->prepare("SELECT * FROM " . DB_ZIP . "
WHERE zipcode like :zip ORDER BY rowid ASC LIMIT 100");
$stt->bindValue(':zip', $_POST['code']."%");
$stt->execute();
if(($row = $stt->fetch(PDO::FETCH_ASSOC)) == NULL){
$error = "該当項目がありません";
}else{
$cnt = $stt->fetchAll(PDO::FETCH_ASSOC);
}
if(($row = $stt->fetch(PDO::FETCH_ASSOC)) == NULL)
ここの部分です。この時点で一回検索されているので一致した物が表示されないのです。。。
そうかよく考えてみればわかる話。。。この一文のせいで3時間ぐらい悩んだ、、、返してくれ~~~~~!!!
$stt = $pdo->prepare("SELECT * FROM " . DB_ZIP . "
WHERE zipcode like :zip ORDER BY rowid ASC LIMIT 100");
$stt->bindValue(':zip', trim($_POST['code']."%"));
$stt->execute();
$cnt = $stt->fetchAll(PDO::FETCH_ASSOC);
if(count($cnt) == 0){
$error = "該当項目がありません";
}
これでうまくいきました。。。う~ん、気持ち的に焦っているとだめですね、かなり見落としがち。。。
まだまだ修行が足りないな。