Php MySQL-使用ORs时,如何知道哪个字段与结果匹配
我正在创建一个引擎,使用MySQL在多个字段中查找结果,例如:Php MySQL-使用ORs时,如何知道哪个字段与结果匹配,php,mysql,search,keyword,Php,Mysql,Search,Keyword,我正在创建一个引擎,使用MySQL在多个字段中查找结果,例如: SELECT table1.*, table2.* FROM table1 JOIN table2 ON table1.id = table2.tid WHERE (table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%') AND (table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%') O
SELECT table1.*, table2.* FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%')
AND
(table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%')
ORDER BY table1.id ASC;
但现在我需要知道哪个字段与关键字匹配。。。我该怎么做
顺便说一句,我正在使用PHP。你可以这样做
SELECT table1.*, table2.*, 'table1' as `target` as FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%')
UNION ALL
SELECT table1.*, table2.*,'table2' as target FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%')
然后在检索结果时检查target
是否为表1或表2
SELECT table1.*, table2.*, 'table1' as `target` as FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%')
UNION ALL
SELECT table1.*, table2.*,'table2' as target FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%')
然后检查
target
是否为表1或表2。在循环中检索结果时,可以执行以下操作:
Table X
Field1 Field2
-------------------
boat caca
hello boat
$Keyword = 'boat';
while($Res = blabla){
if(strpos($Res['Field1'], $Keyword) !== false){
echo 'String found in Field 1<br />';
}
if(strpos($Res['Field2'], $Keyword) !== false){
echo 'String found in Field 2<br />';
}
}
// Will output
String found in Field 1<br />
String found in Field 2<br />
表X
字段1字段2
-------------------
卡卡船
你好,船
$Keyword='boat';
而($Res=blabla){
if(strpos($Res['Field1',$关键字)!==false){
回显“在字段1中找到字符串”
;
}
if(strpos($Res['Field2',$Keyword)!==false){
回显“在字段2中找到字符串”
;
}
}
//将输出
在字段1中找到字符串
在字段2中找到字符串
在循环中,您可以执行以下操作:
Table X
Field1 Field2
-------------------
boat caca
hello boat
$Keyword = 'boat';
while($Res = blabla){
if(strpos($Res['Field1'], $Keyword) !== false){
echo 'String found in Field 1<br />';
}
if(strpos($Res['Field2'], $Keyword) !== false){
echo 'String found in Field 2<br />';
}
}
// Will output
String found in Field 1<br />
String found in Field 2<br />
表X
字段1字段2
-------------------
卡卡船
你好,船
$Keyword='boat';
而($Res=blabla){
if(strpos($Res['Field1',$关键字)!==false){
回显“在字段1中找到字符串”
;
}
if(strpos($Res['Field2',$Keyword)!==false){
回显“在字段2中找到字符串”
;
}
}
//将输出
在字段1中找到字符串
在字段2中找到字符串
您可以为您的条件添加列
SELECT table1.*, table2.*,
table1.field1 LIKE 'keyword%' AS Table1Field1Match,
table1.field2 LIKE 'keyword%' AS Table1Field2Match,
table2.field1 LIKE 'keyword%' AS Table2Field1Match,
table2.field2 LIKE 'keyword%' AS Table2Field2Match
FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%')
AND
(table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%')
ORDER BY table1.id ASC;
您可以为您的条件添加列
SELECT table1.*, table2.*,
table1.field1 LIKE 'keyword%' AS Table1Field1Match,
table1.field2 LIKE 'keyword%' AS Table1Field2Match,
table2.field1 LIKE 'keyword%' AS Table2Field1Match,
table2.field2 LIKE 'keyword%' AS Table2Field2Match
FROM table1
JOIN table2
ON table1.id = table2.tid
WHERE
(table1.field1 LIKE 'keyword%' OR table1.field2 LIKE 'keyword%')
AND
(table2.field1 LIKE 'keyword%' OR table2.field2 LIKE 'keyword%')
ORDER BY table1.id ASC;
未经核实:
SELECT table1.*,
table2.*,
case (table2.field1 LIKE 'keyword%' and table1.field1 LIKE 'keyword%')
when 1
then 'f1'
else 'f2'
end as field
FROM table1
...
未经核实:
SELECT table1.*,
table2.*,
case (table2.field1 LIKE 'keyword%' and table1.field1 LIKE 'keyword%')
when 1
then 'f1'
else 'f2'
end as field
FROM table1
...
-1这不就是让处理器做更多的工作吗?您已经在MySQL中完成了字符串匹配,为什么还要在PHP中再次进行匹配呢?因为首先比较容易。第二,它需要更多的处理器,但是,如果MySQL有更少的工作要做,你的MySQL服务器会更快,你不知道吗-1这不就是让处理器做更多的工作吗?您已经在MySQL中完成了字符串匹配,为什么还要在PHP中再次进行匹配呢?因为首先比较容易。第二,它需要更多的处理器,但是,如果MySQL有更少的工作要做,你的MySQL服务器会更快,你不知道吗。。。不确定这是否会有所不同,但在SELECT和WHERE中都使用类似的选项可能会使MySQL进行两次匹配。字符串匹配可能会很昂贵(尤其是使用ORs),因此在“选择并使用”中进行匹配可能会更好,因为必须过滤结果?拥有通常永远不会更好。在某些情况下,它仍然需要在过滤之前生成完整的结果集,这会使一切变得缓慢。在这种情况下,由于SELECT部分中的条件将只针对匹配的行进行计算,因此我认为这不会产生太大的影响。不确定这是否会产生影响,但SELECT和WHERE中的条件相同可能会使MySQL进行两次匹配。字符串匹配可能会很昂贵(尤其是使用ORs),因此在“选择并使用”中进行匹配可能会更好,因为必须过滤结果?拥有通常永远不会更好。在某些情况下,它仍然需要在过滤之前生成完整的结果集,这会使一切变得缓慢。在这种情况下,由于SELECT部分中的条件将只针对匹配的行进行计算,因此我认为这不会产生太大的影响。