我有一个像这样的 mysql 请求:
$request = mysql_query ("
SELECT title
FROM mytable
WHERE (name LIKE '%word%' OR description LIKE '%word%' OR skills LIKE '%word%')
");
$z=1;
while($result = mysql_fetch_array($request))
{
$title[$z]=$result['title']);$z++;
};
显然,我想显示一个实体的标题,其中该实体行的名称、描述或技能包含特定的词。
但是,我怎么知道这个标题是否因为“名称”、“描述”或“技能”的成功结果而被显示?
我的脚本无法发挥作用。 当然,我可以为每个元素创建一个请求,但我有很多。
谢谢。
编辑:
也许是我,但这是真正的请求,它还没有工作:
<?php
$requete3 = mysql_query("
SELECT
denomination,
owners,
description_".$get_lang.",
CONCAT (
IF (denomination LIKE '%".$search_word."%', '1', '0'),
IF (owners LIKE '%".$search_word."%', '1', '0'),
IF (description_".$get_lang." LIKE '%".$search_word."%', '1', '0')
) AS match_bitmask
FROM element1_entities
WHERE
(
denomination LIKE '%".$search_word."%' OR
owners LIKE '%".$search_word."%' OR
description_".$get_lang." LIKE '%".$search_word."%'
)
AND f_filter_types_entities_id=2
ORDER BY id DESC
");
?>
一旦我摆脱了 CONCAT 部分,错误消息就消失了。 我还在周围和内部尝试了不同的括号配置,但没有成功。 我可能做错了什么。
最佳答案
您可以尝试这样的事情 - 尽管您正在将一些处理插入查询......
SELECT
title,
CONCAT(
(IF (name LIKE '%word%', '1', '0')),
(IF (description LIKE '%word%', '1', '0')),
(IF (skills LIKE '%word%', '1', '0'))
) AS match_bitmask
FROM mytable
WHERE (name LIKE '%word%' OR description LIKE '%word%' OR skills LIKE '%word%')
这应该给你一种二进制位掩码,提供有关在哪里找到匹配项的信息。
因此 name
和 skills
的匹配会在名为 match_bitmask
的列中为您提供 101
,您可以在您的 PHP 循环中访问。
一旦进入循环,您的位掩码中基本上有 3 列,其中 name 在列“4”(位掩码的第一列)上,description 在列上“2”(第二列)和“1”列(第三列)上的技能。
然后您可以评估结果匹配的位置:
$iBitmask = (int) $result['match_bitmask'];
$iDecimalmask = bindec($iBitmask);
// if `name` matches
if($iDecimalmask & 4) {
... do stuff ...
}
// if `description` matches
if($iDecimalmask & 2) {
... do stuff ...
}
// if `skills` matches
if($iDecimalmask & 1) {
... do stuff ...
}
关于php Mysql 多个WHERE的时候如何标记origin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707197/