带外键的PHP MySQL查询

时间:2018-07-24 04:31:21

标签: php mysql sql search crud

我的数据库中有2个表tb_devicetb_label,其中包含以下表格:

tb_device
id (AI)  |   type  |  label  |  etc
-------------------------------------
  1      |   A123  |    1    |  test
  2      |   A561  |    3    |  test2
  3      |   A777  |    2    |  test3
  4      |   A222  |    3    |  test4

tb_label
id (AI)  |  label
-------------------
  1      |  Samsung
  2      |  Apple
  3      |  Dell

并且我已经创建了显示tb_devices的CRUD表单(PHP)。并且此CRUD在每列上都有一个搜索表单。其他列可用于搜索,但标签列不起作用,因为其中包含id中的tb_label。我想搜索标签名称为samsungappledell的标签,而不是数字。我的搜索代码:

$sql = "SELECT *
            FROM tb_device a, tb_label b
            WHERE
                type LIKE '%".@$_POST['type']."%' AND
                (a.label=b.id AND b.label LIKE '%".@$_POST['label']."%') AND
                etc LIKE '%".@$_POST['etc']."%'
            ORDER BY type
    ";

我尝试输入dell,但结果:

      3      |   A777  |    2    |  test3

说明:dell具有id数字3,结果显示id3数字tb_device。有什么解决方案可以显示正确的结果?

对不起,英语不好

2 个答案:

答案 0 :(得分:3)

您在查询中错过了b.label

 $sql = "SELECT a.*, b.label
                FROM tb_device a, tb_label b
                WHERE
                    a.type LIKE '%".@$_POST['type']."%' AND
                    (a.label=b.id AND b.label LIKE '%".@$_POST['label']."%') AND
                    etc LIKE '%".@$_POST['etc']."%'
                ORDER BY a.type
        ";

答案 1 :(得分:0)

我相信您应该只在tb_label.label =(您的用户输入变量:Dell)的地方

我相信你想做

INNER JOIN tb_label
ON tb_device.label = tb_label.id