搜索*以重新定义字符串的一部分

时间:2015-04-21 07:46:32

标签: javascript php mysql

我的问题:我有一个php搜索表单,我需要用户才能重新定义搜索字符串的一部分。

示例(到目前为止用户输入):

// Search Option

name: 20081111-1    //which means that the date of the item is 2008-11-11

现在,我希望用户进行搜索,它只会包含2008年的所有项目(所需的用户搜索):

// Search Option

 name: 2008*

如何在搜索中创建此选项?然后我可以在我的数据库中搜索字符串的这一部分。

谢谢!

4 个答案:

答案 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开头的数字。