首页 > 解决方案 > Mysql 从不同的表中按名称选择

问题描述

我在 MySQL 中有以下 2 个表:

表设置

|id |name|clientid|
------------------
| 1 | a  | 33    |
------------------
| 2 | b  | 34    |
------------------

表客户端

|id  |clientname |
------------------
| 33 | c         |
------------------
| 34 | a         |
-----------------

我试图在哪里进行搜索查询,它将始终从第一个表中返回 id。

查询至今:

$this->conn->prepare("SELECT Settings.id as value, 
                             Settings.name as label 
                      FROM Settings
                      LEFT JOIN client ON Settings.clientid = client.id
                      WHERE Settings.name LIKE :keyword 
                            OR Settings.id LIKE :keywordid 
                            OR client.clientname LIKE :keywordclient 
                      LIMIT 10");

$stmt->bindValue(':keyword', "%{$this->keyword}%", PDO::PARAM_STR); 
$stmt->bindValue(':keywordid', "%{$this->keyword}%", PDO::PARAM_STR);   
$stmt->bindValue(':keywordclient', "%{$this->keyword}%", PDO::PARAM_STR);   

所以基本上这个想法是以下如果搜索字母a,搜索将在设置中进行搜索以查看keywrod是否是LIKE id或名称,或者它必须搜索并查看客户端表内部,看看它是否像Clientname。结果总是必须是设置表中的 ID,而不是名称或客户端名称作为其他两个页面的标签,具体取决于结果。

在这种情况下,结果必须是两个

value: 1 label: a
value: 2  /*from Settings table*/ label: a  /*from the client table*/

任何帮助将不胜感激解决这种情况。

标签: phpmysqlsqlpdo

解决方案


ORDER BY Settings.id通过or添加一个订单ORDER BY value(忘记是哪一个,哈哈)

SELECT Settings.id as value,
        Settings.name as label 
    FROM Settings
        LEFT JOIN client ON Settings.clientid = client.id
    WHERE Settings.name LIKE :keyword 
        OR Settings.id LIKE :keywordid 
        OR client.clientname LIKE :keywordclient 
    ORDER BY Settings.id
    LIMIT 10

推荐阅读