Php 在一个查询中选择多个mysql,然后分别访问它们

Php 在一个查询中选择多个mysql,然后分别访问它们,php,mysql,Php,Mysql,我想一次执行两个select查询,但数据彼此不相关,因此左连接等不起作用。。因为这样我就得到了无法使用的数据 到目前为止,我得到的是 $sql .= "SELECT *, servertypes.id as servertypeID, servertypes.name as servertypeName FROM servertypes"; $sql .= " JOIN". " (SELECT *, periods.id

我想一次执行两个select查询,但数据彼此不相关,因此左连接等不起作用。。因为这样我就得到了无法使用的数据

到目前为止,我得到的是

$sql .= "SELECT *,
        servertypes.id as servertypeID, 
        servertypes.name as servertypeName 
       FROM servertypes";

$sql .= " JOIN".
    " (SELECT *,
        periods.id as periodID,
        periods.daysForSorting as periodNumber,
        periods.text as periodsText
       FROM periods
       ) AS periods";

$res = mysql_query($sql);
if(!$res) die("database_error_cant_select_data : ".$sql." : ".mysql_error());
但是现在如何分别访问
servertypes
periods
?我想我必须完全停止使用JOIN,但我不知道

为了说明我的意思,它类似于:

while ($row = mysql_fetch_assoc($res["servertypes"]))
{
    print_r($row);
    echo"<br/><br/>";
}

while ($row = mysql_fetch_assoc($res["periods"]))
{
    print_r($row);
    echo"<br/><br/>";
}
while($row=mysql\u fetch\u assoc($res[“servertypes”]))
{
打印(行);
回声“

”; } while($row=mysql\u fetch\u assoc($res[“periods”])) { 打印(行); 回声“

”; }

仅使用一个查询是否可以执行此操作?

通常,如果两个查询返回相同的列号,则可以执行类似操作

Table1
-----------
ProductID
Price
Qty

Table2
-----------
ProductID
Price
Qty

$Query = '(SELECT "Table1" AS Source, * FROM Table1) UNION (SELECT "Table2" AS Source, * FROM Table2)';

$Data = array('T1' => array(), 'T2' => array());
while($Assoc = mysql_fetch_assoc($Query)){
    switch(strtoupper($Assoc['Source'])){
        case 'TABLE1':
            $Data['T1'][] = $Assoc;
            break;

        case 'TABLE2':
            $Data['T2'][] = $Assoc;
            break;

        default:
            break;
    }
}

//  $Data['T1'] now hold everything from Table1
//  $Data['T2'] now hold everything from Table2
但在这里,没有什么是相关的。因此,要回答您的问题:不,您不能做您想做的事。

请查看multi\u query()/use\u result()/next\u result()函数,以下是示例:


理想情况下,我不需要这样做。

在一个查询中加入数据没有意义。您尝试加入的实体完全不同,彼此之间没有链接。如果单独使用它们,请执行单独的查询

如果必须同时选择它们(以避免竞争条件),则应使用事务

begin transaction;
.....queries....
commit;

你为什么要把它们都放在一起?看起来两者的数据并不相关。为什么不使用两个独立的查询?为什么使用“选择*”?您应该明确列出列。@Nico只是想知道是否真的有可能。。。更少的查询=总是更好,但如果不能做到这一点则无关紧要。同样,我只是好奇。@natli-less查询在查询数据相关时更好,如果它们不相关,那么进行2次查询并避免问题;)如果列数相同,则可以使用,否则,在MySQL中不能这样做。您可以使用强制使用相同数量的列,但这可能太过分了。只有在两个表的列数相同的情况下,才能执行此操作,否则会出现错误,无法执行。。太糟糕了。不过还是学到了一些新东西,所以谢谢;)名称无关紧要查询将只采用第一个
选择
上的名称,但是如果您有一个包含3列的查询,另一个包含4列的查询,则会给出一个错误。“第一个SELECT语句中的列名用作返回结果的列名。”来自Nico的是正确的。它必须是相同的列数,而不是名称。它将使用第一个结果中的名称。