两个具有match和against函数的不相关表

lqfhib0f  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(382)

如何将两个不相关的表合并到一个sql select语句请求中。但是,这两个表都需要有用于全文搜索的match和against函数。我得到的是一个空白响应,当我执行单表sql匹配和反请求时,它可以正常工作,但当我执行两个表时就不行了。
表1:transport-only id是一个主键整数auto\ u increment,但其余的是varchar

+----+---------+-----------+--------------+
    | id | title   | type      | tags         |
    +----+---------+-----------+--------------+
    | 1  | triumph | motorbike | sport, black |
    +----+---------+-----------+--------------+
    | 2  | bmw     | car       | hatchback    |
    +----+---------+-----------+--------------+

表2:automobile--只有id是主键integer auto\ u increment,其余的是varchar

+----+-----------+-----------+------------+---------+
    | id | name      | kind      | link       | listed  |
    +----+-----------+-----------+------------+---------+
    | 1  | suzuki    | motorbike | /bike/new/ | green   |
    +----+-----------+-----------+------------+---------+
    | 2  | volkwagan | car       | /car/new/  | limited |
    +----+-----------+-----------+------------+---------+

我需要它打印出这样的内容(只是一个注解,不确定我将如何需要id-可能需要两列id\u automobile和id\u transport来引用上面的两个表)

+----+-----------+-----------+------------+--------------+
    | id | title     | type      | link       | tags         |
    +----+-----------+-----------+------------+--------------+
    | 1  | suzuki    | motorbike | /bike/new/ | green        |
    +----+-----------+-----------+------------+--------------+
    | 2  | triumph   | motorbike |            | sport, black |
    +----+-----------+-----------+------------+--------------+
    | 3  | bmw       | car       |            | hatchback    |
    +----+-----------+-----------+------------+--------------+
    | 4  | volkwagan | car       | /car/new/  | limited      |
    +----+-----------+-----------+------------+--------------+

我失败的尝试:

<table>
      <tr>
        <th>Title</th>
        <th>Type</th>
        <th>Link</th>
        <th>Tags</th>
      </tr>

    if(isset($_GET['search'])) {
        $search = $_GET['search'];
    } else {
        $search = '';
    }

    $sql = "SELECT * FROM `transport` WHERE MATCH(title, tags) AGAINST('".$search."') CROSS JOIN `automobile` WHERE MATCH(name, listed) AGAINST('".$search."')";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo "<tr>";
            echo "<td>".$row["title"]."</td><td>".$row["type"]."</td><td>".$row["link"]."</td><td>".$row["tags"]."</td>";
            echo "</tr>";
        }
    } else {
        echo "0 results";
    }
    $conn->close();

    </table>

如果有任何帮助,我将不胜感激

0sgqnhkj

0sgqnhkj1#

UNION 子句应该给你所需要的结果。
只要确保bost SELECT s、 结合 UNION ,具有相似的列集。你可以用 AS 定义别名。
像这样:

SELECT title, type, '' AS link, tags
WHERE MATCH(title, tags) AGAINST('...')
FROM transport
UNION
SELECT name AS title, kind AS type, link, listed AS tags
FROM automobile
WHERE MATCH(title, kind) AGAINST('...')

相关问题