我有一个数据库,其中的文件名为abcd100.00b,abcd101.00b,...
我需要一个代码,当用户单独输入abcd然后100到110时,应显示名称为abcd且范围为100到110的所有文件。
这些是具有iisc001.10h
等命名约定的rinex文件。有多个文件,范围从iisc001.10h
到iisc100.30h
,依此类推。我希望能够搜索iisc
(前4个字符),然后搜索001到100 - 此范围内的所有文件都需要以表格形式显示。
以下代码只能显示前四个字符,我该如何实现呢?
<?php
//capture search term and remove spaces at its both ends if the is any
$searchTerm = trim($_GET['keyname']) ;
//check whether the name parsed is empty
if($searchTerm == "rinex_file")
{
echo "Enter name you are searching for.";
exit();
}
if($searchTerm == "rinex_file")
{
echo "Enter name you are searching for.";
exit();
}
//database connection info
$host = "localhost"; //server
$db = "rinex"; //database name
$user = "m"; //dabases user name
$pwd = "c"; //password
//connecting to server and creating link to database
$link = mysqli_connect($host, $user, $pwd, $db);
//MYSQL search statement
$query = "SELECT * FROM rinexo WHERE rinex_file LIKE '%$searchTerm%'";
$results = mysqli_query($link, $query) ;
/* check whethere there were matching records in the table
by counting the number of results returned */
if(mysqli_num_rows($results) >= 1){
echo '<table border="1">
<tr>
<th>rinex version</th>
<th>program</th>
<th>date</th>
<th>maker name</th>
<th>maker number</th>
<th>observer</th>
<th>agency</th>
<th>position_X_Y_Z</th>
</tr>';
while($row = mysqli_fetch_array($results)){
echo '<tr>
<td>'.$row['rinex_version'].'</td>
<td>'.$row['pgm'].'</td>
<td>'.$row['date'].'</td>
<td>'.$row['marker_name'].'</td>
<td>'.$row['marker_no'].'</td>
<td>'.$row['observer'].'</td>
<td>'.$row['agency'].'</td>
<td>'.$row['position_X_Y_Z'].'</td>
</tr>';
}
echo '</table>';
}else{
echo "There was no matching record for the name " . $searchTerm;
}
答案 0 :(得分:0)
您可以尝试使用正则表达式:
SELECT *
FROM rinexo
WHERE rinex_file regexp '^$searchTerm([0][0-9]{2}|100)\.'
如果$ searchTerm ='iisc',则此代码将获取从“iisc001”开始的记录。并且达到“iisc100。”。你需要引用$ searchTerm(php函数preg_quote),所以没有特殊字符不会进入查询。
在http://dev.mysql.com/doc/refman/5.1/en/regexp.html
的mysql中查看有关正则表达式的更多信息但是reqular表达式可以不那么快,如果可能的话创建addtional列,其中将放置你需要的整数值,例如:
1 for iisc001.10h
2 for iisc002.10h
100 for iisc100.10h
搜索词(在数字之前,作为“iisc”)也有意义移动到单独的列并为它们创建索引,并且搜索将仅在它们上进行。
还有一种方式:
select rinex_file,
substr(rinex_file, 1, 4) as prefix,
substr(rinex_file, 5, locate('.', rinex_file)-5) as digits,
substr(rinex_file, -3, 2) as suffix,
substr(rinex_file, -1) as postfix
from rinexo
where substr(rinex_file, 1, 4) like 'iis%'
and substr(rinex_file, 5, locate('.', rinex_file)-5) like '0%'