我的问题:我有一个php搜索表单,我需要用户才能重新定义搜索字符串的一部分。
示例(到目前为止用户输入):
// Search Option
name: 20081111-1 //which means that the date of the item is 2008-11-11
现在,我希望用户进行搜索,它只会包含2008年的所有项目(所需的用户搜索):
// Search Option
name: 2008*
如何在搜索中创建此选项?然后我可以在我的数据库中搜索字符串的这一部分。
谢谢!
答案 0 :(得分:4)
<强>的Javascript 强>:
var str = '200811111-1';
var hasSubString = str.indexOf('2008') > -1;
var startsWithString = str.indexOf('2008') == 0;
<强> MySQL的强>:
有子串2008:
select * from table where col like '%2008%'
从2008年开始:
select * from table where col like '2008%'
答案 1 :(得分:2)
选项1:
您将使用PHP变量并用百分号(%)替换星号(*):
<?php
$name = $_POST['name']; // remember to sanitize it
$name = str_replace('*', '%', $name);
?>
然后,您将使用变量创建MySQL查询:
$query = "SELECT * FROM table WHERE column LIKE '$name'";
选项2:
使用MySQL日期查询:
$query = "SELECT * FROM table WHERE YEAR(column) = '2008'";
请注意,column
应为日期或日期时间类型。
您应该为用户添加上下文帮助,甚至可以为可能的选项添加下拉菜单,例如,他们不会搜索“20081”。
答案 2 :(得分:0)
在这种特定情况下,您可以在查询中使用
date like '%2008-%'
而不是
date = '2008-11-11'
表示搜索日期字段包含以下模式的行&#34; 2008 - &#34;。
答案 3 :(得分:0)
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
在sql中使用 case 2008 中的模式进行搜索时,您可以使用正则表达式来动态搜索以2开头的数字。