Php 如何获取通过搜索查询找到的记录数?
我正在为我的网站创建一个搜索引擎,我想添加找到的搜索结果的数量,我寻找了这样做的功能,但我发现的所有功能都不在PDO中。所以我决定运行两次查询,但我不确定这是否可行。有没有更好的方法来计算PDO中的结果?否则,运行同一查询两次是否安全?谢谢大家!Php 如何获取通过搜索查询找到的记录数?,php,mysql,pdo,Php,Mysql,Pdo,我正在为我的网站创建一个搜索引擎,我想添加找到的搜索结果的数量,我寻找了这样做的功能,但我发现的所有功能都不在PDO中。所以我决定运行两次查询,但我不确定这是否可行。有没有更好的方法来计算PDO中的结果?否则,运行同一查询两次是否安全?谢谢大家! <?php if(isset($_GET['tab'])) { if($_GET['tab'] == 'all') { $query
<?php
if(isset($_GET['tab']))
{
if($_GET['tab'] == 'all')
{
$query = $db->query('SELECT * FROM search WHERE title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\' LIMIT 20');
}
else if($_GET['tab'] == 'products')
{
$query = $db->query('SELECT * FROM search WHERE (type = \'products\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
}
else if($_GET['tab'] == 'blogpost')
{
$query = $db->query('SELECT * FROM search WHERE (type = \'blogpost\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
}
else if($_GET['tab'] == 'forumthread')
{
$query = $db->query('SELECT * FROM search WHERE (type = \'forumthread\') AND (title LIKE \'%'.$_GET['searchquery'].'%\' OR details LIKE \'%'.$_GET['searchquery'].'%\' OR link LIKE \'%'.$_GET['searchquery'].'%\') LIMIT 20');
}
?>
<div id="resultsconainter">
<div id="tabsconatiner">
</div>
<?php
else
{
echo '<p>Sorry, this section is not available!</p>';
}
if(isset($query))
{
for($i=0; $i<100; $i++)
{
if($result = $query->fetch())
{
$_GET['searchquery'] = rawurlencode($_GET['searchquery']);
$result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result);
echo '<div class="result">
<a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a>
<span class="link">
<span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">‣</span>
localhost/QSoft/'.$result['link'].'
</span>
<span class="details">'.$result['details'].'</span>
</div>';
}
else
{
if($i==0)
{
echo '<p>Sorry, no resluts found here for : <b>'.$_GET['searchquery'].'</b></p>';
}
}
}
}
}
else
{
echo'<p>Missing tab informations, please retry</p>';
}
}
?>
假设您使用这样的东西
$result=$sth->fetchAll()
要从查询中获取所有记录,可以执行count($result)
以返回记录数。因此不需要1个查询。为了获得更准确的答案,最好向我们提供部分代码,以便我们能够为您提供帮助。是的,对于搜索引擎,您应该运行两个查询:
- 一个是获取实际搜索结果。请注意,您应该始终使用limit运算符限制SQL查询中的选定行数
- 一个用于获取与搜索条件匹配的行数此查询不应返回实际行,只返回一个数字
SELECT
之后添加SQL\u CALC\u FOUND\u ROWS
关键字:
$query = $db->query('SELECT SQL_CALC_FOUND_ROWS * FROM search ... LIMIT 20');
而对于第二个问题,只需运行以下简单代码
$count = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
好的,这就是我所做的,我认为它不是很干净,但它可以工作:
if(isset($query))
{
$didgetcount = false;
for($i=0; $i<100; $i++)
{
if($result = $query->fetch())
{
$_GET['searchquery'] = rawurlencode($_GET['searchquery']);
$result = preg_replace("#\\b(" . $_GET['searchquery'] . ")\\b#i", "<b>$1</b>", $result);
echo '<div class="result">
<a class="title" href="/qsoft/'.$result['link'].'">'.$result['title'].'</a>
<span class="link">
<span class="beforelink" style="font-size:1.1em;font-size:1.3vw;position:relative;top:1px;padding-right:1px;">‣</span>
localhost/QSoft/'.$result['link'].'
</span>
<span class="details">'.$result['details'].'</span>
</div>';
}
else
{
if($i==0)
{
echo '<p>Sorry, no resluts found here for : <b>'.$_GET['searchquery'].'</b></p>';
echo '<script> document.getElementById("resultsnumber").innerText = 0;</script>';
$didgetcount = true;
}
else
{
if($didgetcount == false)
{
echo '<script>
function writeresults(n)
{
document.getElementById("resultsnumber").innerText = n;
}
writeresults('.$i.');
</script>';
$didgetcount = true;
}
}
}
}
}
}
else
{
echo'<p>Missing tab informations, please retry</p>';
}
if(isset($query))
{
$didgetcount=false;
对于($i=0;$ifetch())
{
$\u GET['searchquery']=rawurlencode($\u GET['searchquery']);
$result=preg#u replace(“..$\u GET['searchquery']”,\\b#i“,“$1”,$result);
回声'
‣
localhost/QSoft/'.$result['link'].'
“.$result['details']”
';
}
其他的
{
如果($i==0)
{
echo'对不起,在此处找不到针对:'的reslut。$\u GET['searchquery'.';
echo“document.getElementById(“resultsnumber”).innerText=0;”;
$didgetcount=true;
}
其他的
{
如果($didgetcount==false)
{
回声'
函数writeresults(n)
{
document.getElementById(“结果编号”).innerText=n;
}
书面结果(‘.$i’);
';
$didgetcount=true;
}
}
}
}
}
}
其他的
{
回显“缺少选项卡信息,请重试”;
}
谢谢!我会试试的。等等,如果我这样做,结果编号会在显示结果之后,对吗?你可以在任何地方显示任何数据。结果之前、之后或相反你认为呢?有什么需要修理的吗?这对我来说很有效。