【问题标题】:Drupal MySQL multiple tables, multiple conditions return table column data which matches a keywordDrupal MySQL 多表,多条件返回匹配某个关键字的表列数据
【发布时间】:2017-10-16 00:55:06
【问题描述】:

如何创建一个查询,选择或连接多个表并返回仅匹配条件 keyworkd 的列。

我有 table1 'field_title_table'

entityid | field_title     | entitytype
---------------------------------------        
413      | WELCOME TO the USA  |   page_hub

table2 'field_description_table'

entityid | field_description     | entitytype
---------------------------------------------        
413      | Land of the free and  |   page_hub

我尝试了以下步骤

$query = db_select('field_title_table', 'wb');
$query->join('field_description_table','sd','sd.entityid = wb.entityid');
$query->fields('wb',array('field_title'));
$query->fields('sb',array('field_description'));

 $db_or = db_or();              
 $db_or->condition('wb.field_title,'%'.$keyword.'%','LIKE');
 $db_or->condition('sb.field_description,'%'.$keyword.'%','LIKE');
 $query->condition($db_or);
 $result = $query->execute()->fetchAll();

$keyword 可以是任何东西。因此,如果 $keyword 是“土地”,我只想从 field_description 表中返回结果“Land of the free and”,但我得到了 field_title 值和 field_description 值不管我的$keyword 只匹配一张桌子。

所以基本上我想要这个

SELECT field_title from field_title_table WHERE field_title LIKE '%$keyword%'

SELECT field_description from field_description_table WHERE field_description LIKE '%$keyword%'

没有多个 SELECT

所以我想要的输出是

如果我的关键字是welcome,那么输出应该是

[field_title] => WELCOME TO THE USA (field_title_table)
[field_description]=> '' (field_description_table)

如果我的关键字是land,那么输出应该是

[field_title] => '' (field_title_table)
[field_description]=> 'Land of the free and' (field_description_table)

如果我的关键字是the,那么输出应该是

[field_title] => WELCOME TO the USA (field_title_table)
[field_description]=> 'Land of the free and' (field_description_table)

【问题讨论】:

    标签: php mysql sql-server drupal


    【解决方案1】:

    我认为你想要的查询:

    SELECT A.filed_title,B.field_description 
    FROM field_title_table A,field_description_table B
    WHERE A.entityid =B.entityid  
    AND (A.filed_title LIKE '%your_keyword%' OR B.field_description LIKE '%your_keyword%' )
    

    我测试了它并工作了

    我想我得到了你所期望的,你不能在查询中做条件,所以你必须使用一个存储过程来执行你的查询并过滤结果

    嗯,有一种方法可以使用 php 来过滤你的结果

    <?php
    
    // your query 
    $key="/".$keyword."/";
    foreach($result AS $row){
    
         if(preg_match($key,$row['field_title']))
         {
           echo 'field title =>' .$row['field_title'];
           echo 'filed_description => \'\' ';
         }else{
           echo 'field title => \'\' ';
           echo 'filed_description => '.$row['field_description'];
         }
    
    }
    
    
    
    ?>
    

    【讨论】:

    • 我试过了,这正是我遇到的问题,我不想要没有关键字的字段,就像它是两个选择查询一样。
    • 给我们你想要的输出
    • 我想我得到了你所期望的,你不能在查询中做条件,所以你必须使用一个存储过程来执行你的查询并过滤结果
    • 谢谢,您的回答将在查询后处理结果,我想知道查询本身是否可能。我会将您的答案标记为解决方案,但会等待 24 小时等待任何新的解决方案,但看起来您的答案似乎是唯一的解决方案。
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多