我想索引和排序已查找的搜索词列表。我有一个单独的表在我的数据库与以下信息
_ID int Auto_Increment,
TERM varchar(255),
RANK int
我用来获取和显示结果的代码如下
<?php
$q = $_GET['q'];
$DB_NAME = 'code_storage';
$DB_HOST = 'localhost';
$DB_USER = 'user';
$DB_PASS = 'pass';
try {
$dsn = "mysql:host=$DB_HOST;dbname=$DB_NAME";
$db = new PDO($dsn, $DB_USER, $DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "SELECT * FROM `snippets` WHERE `CODE_NAME` LIKE :name1 OR `CODE_DESC` LIKE :name2 OR `CODE_TAGS` LIKE :name3 OR `CODE_USAGE` LIKE :name4";
$prep = $db->prepare($query);
$qpattern = "%" . $q . "%";
$prep->execute(array(":name1" => $qpattern, ":name2" => $qpattern, ":name3" => $qpattern, ":name4" => $qpattern));
echo '<div class="row">';
echo '<div class="panel">';
printf("Your search for <b>$q</b> returned %d records.'n", $prep->rowCount());
echo '</div>';
echo '</div>';
while ($row = $prep->fetch()) {
echo ' <div class="row">' . "'n";
echo ' <div class="large-12 columns">' . "'n";
echo ' <b><a href="results.php?id=' . $row['_ID'] . '">' . $row['CODE_NAME'] . '</a></b><br/><br/>' . "'n";
echo ' </div>' . "'n";
echo ' </div>' . '<br/>' . "'n";
$db = null;
}
}
catch (PDOException $e) {
echo '<div class="row">';
echo '<div class="panel">';
echo 'Connection failed: ' . $e->getMessage();
echo '</div>';
echo '</div>';
}
?>
我有一个主要问题
- 如何将从$q中提取的搜索词插入到搜索表中
编辑:我知道了,我只是在$query下添加了这个,现在它工作了
$search = "INSERT INTO `search` (`TERM`, `RANK`) VALUES (:search, 1) ON DUPLICATE KEY UPDATE `RANK` = `RANK` + 1";
$sprep =$db->prepare($search);
$sprep->execute(array(":search" => $q));
我会把查询从你的if语句中分离出来,这样你就可以更好地调试它。而不是:
if(!$result = $mysqli->query($sql)){
我会这样做:
$result = $mysqli->query($sql);
if($result === false){
然后我将使用查询来插入关键字或更新该关键字在流行表中的排名。请参阅本文:mysql如果存在。我会这样做:
INSERT INTO `popular` (keyword, rank) VALUES ('new keyword', 1)
ON DUPLICATE KEY UPDATE `rank` = `rank` + 1;
假设您的关键字是主键的一部分,那么如果该关键字不存在,则将插入该关键字,如果它存在,则增加其排名。