1

我想一次执行两个选择查询,但数据彼此不相关,因此 LEFT JOIn 等不会这样做..因为那样我最终得到了我无法使用的数据。

到目前为止我得到的是;

$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/>";
}

这可能只使用一个查询吗?

4

4 回答 4

2

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

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

但在这里,没有什么是相关的。所以回答你的问题:不,你不能做你想做的事。

于 2012-05-30T16:40:38.840 回答
1

查看 multi_query() / use_result() / next_result() 函数,这里是示例:

http://www.robert-gonzalez.com/2007/06/01/mysql-multiple-result-procs-in-php/

理想情况下,我会远离需要这样做。

于 2012-05-30T16:41:55.403 回答
0

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

于 2012-05-30T16:42:06.387 回答
0

如果必须一起选择它们(以避免竞争条件),那么您应该使用事务。

begin transaction;
.....queries....
commit;
于 2012-05-30T16:44:22.303 回答