Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在sql查询中将子表声明为父表?_Php_Mysql_Left Join_Inner Join_Parent Child - Fatal编程技术网

Php 如何在sql查询中将子表声明为父表?

Php 如何在sql查询中将子表声明为父表?,php,mysql,left-join,inner-join,parent-child,Php,Mysql,Left Join,Inner Join,Parent Child,我在一个搜索页面上工作,总共有5个表我必须加入 Table one (fields) = id | title | country | state Table two (fields) = id | category Table three (fields) = id | tbl_1_id | tbl_2_id | value Table Four (fields) = id | tbl_1_id | data Table Five (fields) = id | tbl_

我在一个搜索页面上工作,总共有5个表我必须加入

Table one   (fields) = id |   title  | country  | state
Table two   (fields) = id | category 
Table three (fields) = id | tbl_1_id | tbl_2_id | value
Table Four  (fields) = id | tbl_1_id | data
Table Five  (fields) = id | tbl_1_id | tags
问题是,我的查询无法从表2中获取数据 我的问题是

SELECT one.*, two.*, three.*, four.*, five.*

FROM one
LEFT JOIN two   ON two.id = three.tbl_2_id
LEFT JOIN three ON one.id = three.tbl_1_id
LEFT JOIN four  ON one.id = four.tbl_1_id
LEFT JOIN five  ON one.id = five.tbl_1_id

WHERE 

one.title    LIKE '%$keyword%' OR 
one.country  LIKE '%$keyword%' OR 
one.state    LIKE '%$keyword%' OR 
two.category LIKE '%$keyword%' OR 
three.value  LIKE '%$keyword%' OR 
four.data    LIKE '%$keyword%' OR 
five.tags    LIKE '%$keyword%' ORDER By one.id DESC";
我认为,表2没有表1中的任何字段,这就是为什么我的查询没有从表2中获取数据 我说得对吗

表1是父表,所有其他表都是子表。正当 我的想法是,如果我能使表2成为另一个父表,表3成为它的子表,也许我的查询会起作用

我正在寻找一个查询,什么可以从所有表中获取所有数据。列是否为空。 希望你们能理解。如果没有,请告诉我,谢谢。

我解决了它: 这是我的新问题-

SELECT one.*, two.*, three.*, four.*, five.*

FROM one 
LEFT JOIN two
    INNER JOIN three ON two.id = three.tbl_2_id
                     ON one.id = three.tbl_1_id
    LEFT JOIN four   ON one.id = four.tbl_1_id
    LEFT JOIN five   ON one.id = five.tbl_1_id

WHERE 

one.title    LIKE '%$keyword%' OR 
one.country  LIKE '%$keyword%' OR 
one.state    LIKE '%$keyword%' OR 
two.category LIKE '%$keyword%' OR 
three.value  LIKE '%$keyword%' OR 
four.data    LIKE '%$keyword%' OR 
five.tags    LIKE '%$keyword%' ORDER By one.id DESC

我不知道这是否是编写此查询的正确方法,但它确实有效。

不!将变量绑定到查询。这是非常危险的。不工作意味着什么?我猜是你的or开关。在你所有的or语句周围使用括号将它们分组。FrankerZ的意思是让你在代码问题中阅读请给出一个-cut&paste&runnable代码;作为表格初始化代码的示例输入,所需和实际输出包括逐字错误消息;标签和版本;清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。调试基础。PS您是否意识到您的代码意味着或七个.field,如“%$keyword%”,type=1,status=1?这将解析为一个左连接两个内部连接三个在二上。id=三。tbl_2_id在一上。id=三。tbl_1_id左。。。左边我告诉过你,你的WHERE删除了外部连接将添加到内部连接之外的行,因此是一个内部连接两个内部连接三个在二上。id=三。tbl_2_id在一上。id=二。id内部。。。内部的Ie两个内部连接三对二。id=三。tbl_2_id内部连接一对一。id=三。tbl_1_id内部连接三对二。id=三。tbl_2_id内部。。。内部的还有一个内部连接二对一。id=二。id内部连接三对二。id=三。tbl_2_id内部。。。内部的