Php MYSQL查询将多个字段连接到一个字段

Php MYSQL查询将多个字段连接到一个字段,php,mysql,join,union,Php,Mysql,Join,Union,我试着四处寻找答案,但还没有找到一个能让我找到我想要的地方的答案。我现在有两张桌子,我想加入 胶粘桌 id | adhesive_name | adhesive_code 1 | Ivory | 0090 2 | Jet Black | 0100 3 | Khaki | 0110 4 | Natural | 0120 还有一张火柴桌 id | brand_id | sheet_name | match_1 | match_2 1 |

我试着四处寻找答案,但还没有找到一个能让我找到我想要的地方的答案。我现在有两张桌子,我想加入

胶粘桌

id | adhesive_name | adhesive_code
1  | Ivory         | 0090
2  | Jet Black     | 0100
3  | Khaki         | 0110
4  | Natural       | 0120
还有一张火柴桌

id | brand_id | sheet_name | match_1 | match_2
1  | 1        | Wheat      | 0110    | 0120
2  | 1        | Dew        | 0090    | 0110
等等。。。有数千根火柴和数百种粘合剂。我正在尝试获取匹配并使用连接返回相应的名称

$sql = "SELECT * FROM match_table
JOIN adhesive_table
ON match_table.match_1 = adhesive_table.adhesive_code
WHERE match_table.brand_id
IN ($b)";
($b通过$post发送,并与品牌标识相对应)

这在一场比赛中效果很好。但对于许多人来说,还有第二个(替代)匹配可用,由match_2表示。所以我一直在尝试加入一个工作,在那里我可以抓取比赛1,2,3的名字,但没有用。我一直在尝试以下问题:

$sql = "SELECT * FROM match_table
LEFT JOIN adhesive_table
ON match_table.match_1 = adhesive_table.adhesive_code
LEFT JOIN adhesive_table
ON match_table.match_2 = adhesive_table.adhesive_code
WHERE match_table.brand_id
IN ($b)";

但两者都不起作用。我想知道我的表格的格式是否妨碍了这项工作,或者我是否遗漏了一些明显的东西。这是需要使用group_concat的地方吗

谢谢你能提供的帮助

我应该添加我希望得到的结果如下表:

brand_id = 1
sheet_name = Wheat
 match_1 = (adhesive_code & adhesive_name) 0110 Khaki
 match_2 = (adhesive_code & adhesive_name) 0120 Natural
查询之后,结果被放入一个数组中

$arr = array();
$result = mysql_query($sql);
if($result) {
    while($row = mysql_fetch_array($result)){
        $arr[] = $row;
} 
} else {
$arr[] = "";
}
echo json_encode($arr);
这将被发送回我的主文件,我将在一个循环中获得结果,该循环如下所示:

$.post("getmatches.php",{checkedBrand:checkedBrand},function(json){
    for(var i=0; i<json.length; i++){
        htmlFormat += 
        " sheet : " + json[i].sheet_name
        + " - " + "match_1 : " + json[i].adc1 
        + " - " + "name : "  + json[i].ad1
        + " - " + "match_2 : " + json[i].adc2
        + " - " + "name : "  + json[i].ad2
        + "<br />";
    } // end for loop
    $(".stuffs").html(htmlFormat)
}) // end post  
编辑:我编辑了上面的查询,以便在单独的行中更清楚地显示两个匹配项。另一方面,如果您希望它们都在同一行中,这里有另一个不同的:

$sql="
SELECT id, brand_id, sheet_name, a.adhesive_name, a.adhesive_code, b.adhesive_name, b.adhesive_code 
FROM match_table 
    LEFT JOIN adhesive_table a ON match_table.match_1 = a.adhesive_code
    LEFT JOIN adhesive_table b ON match_table.match_2 = b.adhesive_code
WHERE 
    match_table.brand_id IN ($b)
AND (a.id IS NOT NULL OR b.id IS NOT NULL)";

您的第一次尝试很好,除了一个细节:如果您在同一个表上加入两次,请使用别名:

SELECT * FROM match_table
LEFT JOIN adhesive_table ad1 ON match_table.match_1 = ad1.adhesive_code
LEFT JOIN adhesive_table ad2 ON match_table.match_2 = ad2.adhesive_code
WHERE match_table.brand_id=1;

对这非常感谢你,太棒了。工会。对MYSQL来说还是个新手,我不知道我在追求什么。你是个明星。有没有办法把内容合并成一行?使用UNION,它似乎复制了一切。我通过AJAX返回结果,并运行forloop以获得双重数据。这是我应该用的地方吗?示例:如果单击solid surface>westag getalit(这是一个很容易管理的小图表),您可以看到数据返回两次。您将获得匹配1名称,然后获得匹配2(如果没有数据,则可以为null)名称(重复匹配1的名称)是的,对不起,我忘记用内部连接替换左侧连接;)查看编辑后的代码。什么意思?少了什么吗?是的。你太棒了。这项质询很有效。我只需要弄清楚如何用javascript格式化它,但这是一个真正的救命稻草。谢谢你花了这么多时间帮助我。第二个正是我想要的。我一直没有定义这个,但我看到了逻辑。我会继续玩,看看能不能让它工作。谢谢你的回答。是的,这个查询适用于第一个左连接。。。但是第二个导致它什么也不返回。反之亦然,如果我保留第二个并移除第一个。不管怎样,似乎只接受一个。请不要使用
格式化代码,而是使用`替换或缩进它(请参阅我的编辑)
$sql="SELECT id, brand_id, sheet_name, a.adhesive_name, a.adhesive_code FROM match_table 
INNER JOIN adhesive_table a
ON match_table.match_1 = a.adhesive_code
WHERE match_table.brand_id
IN ($b)
UNION
SELECT id, brand_id, sheet_name, a.adhesive_name, a.adhesive_code FROM match_table 
INNER JOIN adhesive_table a 
ON match_table.match_2 = a.adhesive_code
WHERE match_table.brand_id
IN ($b)";
$sql="
SELECT id, brand_id, sheet_name, a.adhesive_name, a.adhesive_code, b.adhesive_name, b.adhesive_code 
FROM match_table 
    LEFT JOIN adhesive_table a ON match_table.match_1 = a.adhesive_code
    LEFT JOIN adhesive_table b ON match_table.match_2 = b.adhesive_code
WHERE 
    match_table.brand_id IN ($b)
AND (a.id IS NOT NULL OR b.id IS NOT NULL)";
SELECT * FROM match_table
LEFT JOIN adhesive_table ad1 ON match_table.match_1 = ad1.adhesive_code
LEFT JOIN adhesive_table ad2 ON match_table.match_2 = ad2.adhesive_code
WHERE match_table.brand_id=1;