php Mysql 多个WHERE的时候如何标记origin?

标签 php mysql where-clause

我有一个像这样的 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%')

这应该给你一种二进制位掩码,提供有关在哪里找到匹配项的信息。

因此 nameskills 的匹配会在名为 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/

相关文章:

php - 为 PHP 模板学习 Smarty 值得吗?

php - 按顺序随机回显数据库列

javascript - 未接收动态生成的表单数据

mysql - 当它不等于另一个表中的外键时,如何从表中的主键中选择数据?

php - each() 函数已弃用。此消息将在进一步调用 PHP 7.2 时被抑制

mysql - IntelliJ 15/Grails 3 : Cannot connect to mySql DB

MySQL从字符串中删除除两个字符之外的所有字母数字字符

java - MYSQL 一类一个连接

sql - postgresql:附加的 WHERE 子句隐藏了行

sql - 如何在 WHERE 子句中编写带有 SELECT 语句的 SQL DELETE 语句?