简体   繁体   English

在一个查询中从多个表中选择记录

[英]Select records from multiple tables in one query

I have 4 tables not related to each other. 我有4个彼此不相关的表。 I would like to get few records from these tables using one query instead of 4 of them. 我想使用一个查询而不是4个查询从这些表中获取很少的记录。

At the moment this is being done with 4 queries. 目前,这是通过4个查询完成的。 Code: 码:

<?php

$result1 = $mysqli->query("SELECT val1, val2 FROM `table1` WHERE id='1'") or die(mysqli_error());
    $row1 = mysqli_fetch_array($result1, MYSQLI_ASSOC);
    $val1 = $row1['val1'];
    $val2 = $row1['val2'];

$result2 = $mysqli->query("SELECT val3, val4 FROM `table2` WHERE id='2'") or die(mysqli_error());
    $row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC);
    $val3 = $row2['val3'];
    $val4 = $row2['val4'];  

$result3 = $mysqli->query("SELECT val5, val6 FROM `table3` WHERE id='3'") or die(mysqli_error());
    $row3 = mysqli_fetch_array($result3, MYSQLI_ASSOC);
    $val5 = $row3['val5'];
    $val6 = $row3['val6'];  

$result4 = $mysqli->query("SELECT val7, val8 FROM `table4` WHERE id='4'") or die(mysqli_error());
    $row4 = mysqli_fetch_array($result4, MYSQLI_ASSOC);
    $val7 = $row4['val7'];
    $val8 = $row4['val8'];

?>

and my unsuccessful approach to make it in one query. 和我在一次查询中失败的方法。 Code: 码:

<?php
$resultglobal = $mysqli->query("
SELECT
tab1.val1 AS val1,
tab1.val2 AS val2,
tab2.val3 AS Val3,
tab2.val4 AS val4,
tab3.val5 AS val5,
tab3.val6 AS val6,
tab4.val7 AS val7,
tab4.val8 AS val8

FROM 

table1 as tab1, 
table2 as tab2,
table3 as tab3,    
table4 as tab4

WHERE 

tab1.id='1', 
tab2.id='2', 
tab3.id='3', 
tab4.id='4' 
") or die(mysqli_error());

$rowg = mysqli_fetch_array($resultglobal, MYSQLI_ASSOC);
$val1 = $rowg['val1'];
$val2 = $rowg['val2']; 
$val3 = $rowg['val3'];
$val4 = $rowg['val4'];
$val5 = $rowg['val5'];
$val6 = $rowg['val6']; 
$val7 = $rowg['val7'];
$val8 = $rowg['val8'];   
?>

What's wrong? 怎么了? What will be a solution here? 这里有什么解决方案? Any advice highly appreciated. 任何建议高度赞赏。 Thank you very much in advance. 提前非常感谢您。

You just need to replace , WITH AND in your WHERE clause. 你只需要更换,AND你在WHERE子句。 Like this: 像这样:

WHERE
tab1.id='1' AND 
tab2.id='2' AND
... 

It will work ok as long as ID is unique (eg primary key). 只要ID是唯一的(例如主键),它就可以正常工作。 It is an implicit CROSS JOIN. 这是一个隐式的CROSS JOIN。

You could do a multi-query this way: 您可以通过以下方式进行多次查询:

$statement = "SELECT val1, val2 FROM `table1` WHERE id='1';";
$statement .= "SELECT val3, val4 FROM `table2` WHERE id='2';";
$statement .= "SELECT val5, val6 FROM `table3` WHERE id='3';";
$statement .= "SELECT val7, val8 FROM `table4` WHERE id='4'";

$values = $mysqli -> multi_query($statement) or die ('Error: '.$mysqli -> error);

while ($row = $values -> fetch_assoc()) {

    $val1 = $row['val1'];
    $val2 = $row['val2'];
    $val3 = $row['val3'];
    $val4 = $row['val4'];
    $val5 = $row['val5'];
    $val6 = $row['val6'];
    $val7 = $row['val7'];
    $val8 = $row['val8'];

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM