我有一个包含“company_name”列的表。现在有了一些第三方应用程序,我会收到这样的短字符串:有人将项目发送到“堆栈交换”。
我想从字符串中找到stack-exchange company_name列的行。 (换句话说,我希望操作员以相反的方式工作)。怎么做?
编辑:如何检查表中company_name的任何值是否与我收到的字符串的一部分匹配?
答案 0 :(得分:0)
编辑:由于您无法识别输入字符串的哪个部分是公司名称,因此您需要根据字符串检查表中company_name的现有值。例如,在PHP中:
$input = 'Somebody has sent item to "stack-exchange"';
$result = mysql_query('SELECT company_name FROM table');
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if strpos($input, $row['company_name']) === False {
print "Company name is not in this row!" /* Substitute whatever action you want here */
} else {
print "Company name is in this row!" /* Substitute whatever action you want here */
}
}
处理用户输入
确保input is sanitized之前将其作为SQL查询的一部分包含在内。否则,您的代码很容易被黑客攻击。
不幸的是,由于您收到的某些字符串是由用户输入的,因此您无法确定它们是否与您在数据库中的字符串相匹配。例如,"stack-exchange"
可以合理地表示为"Stack Exchange"
,stack exchange
,StackExchange
等。因此,您需要标准化输入以匹配存储公司名称的方式在您的数据库中。例如,您可以将所有字符设为小写,并用连字符替换所有空格或标点符号。这并不排除不正确或变异拼写等边缘情况,但这超出了这个问题的范围。
<击>
如果您收到的第三方字符串可靠地包含双引号中的公司名称(并且双引号不用于指示这些字符串中的任何其他内容),则可以使用PHP检索公司名称。然后,您可以使用SQL WHERE
子句获取相关行。
$input = 'Somebody has sent item to "stack-exchange"';
$parts = explode('"', $input);
$company_name = $parts[1];
$sql_query = 'SELECT * FROM table WHERE company_name="' . $company_name . '"'
击> <击> 撞击>
答案 1 :(得分:0)
我认为你需要更好地解释这个问题,因为我至少可以通过两种方式解释这个问题: i)电子邮件中提供的字符串与名为company-name的列中的某些数据部分匹配: 使用like表达式,根据需要添加% 例如,'%'+ companyname +'%'就像emailstring一样 [将从电子邮件中提供的'堆栈交换'中找到'堆栈交换公司']
ii)有多个列,每个列都以公司命名...... 例如,id,company1,company2,stack-exchange-company,company4
如果您的数据库支持动态sql(例如,大多数SQLServer),您可以计算sql,然后使用set @sqlexpr ='select mytable'exc'执行堆栈交换(@sqlexp)
否则,您需要在调用db之前动态创建sql。