Php 2个MySQL查询不能合并?

Php 2个MySQL查询不能合并?,php,mysql,sql,join,multiple-columns,Php,Mysql,Sql,Join,Multiple Columns,我得到了以下两个mysql\u查询: $result = mysql_query("SELECT * FROM table1 WHERE tenderID='".$_REQUEST["tenderID"]."'"); while($tender = mysql_fetch_array($result)) { $zippy = $tender["ziparea"]; $zipResult = mysql_query("SELECT * FROM table2 WHERE zipar

我得到了以下两个mysql\u查询:

$result = mysql_query("SELECT * FROM table1 WHERE tenderID='".$_REQUEST["tenderID"]."'");
while($tender = mysql_fetch_array($result)) {
    $zippy = $tender["ziparea"];
    $zipResult = mysql_query("SELECT * FROM table2 WHERE ziparea = '".$zippy."'");
    while($zip = mysql_fetch_array($zipResult)) {
        ....
    }
}
第一个查询的工作方式与我希望的一样

表1有“ziparea”列,但对于每个ziparea 01到99,它总是只有一个条目。 表2也有“Zipera”列,但有时每个Zipera有一个以上的条目,例如:Zipera“24”有5个条目;表示5行

我需要两个表中的所有信息,我试图用JOIN合并两个查询,但我无法解决这个问题,上面的代码中也存在这个问题

问题是,尽管表1中只有一个条目,但它总是提供与表2为查询2提供的行数相同的行数

这意味着如果Zipera为24,表1中只有一行Zipera为“24”,当然只有一行具有匹配的tenderID,但表2中有5行Zipera为“24”,则查询1中的值将是相同值的5倍

我真的不明白为什么

也许你能为我找到解决办法

表1和表2的结构:


你错了。联接查询 选择* 来自表1 t1,表2 t2关于t1.Zipera=t2.Zipera 其中tenderID='.$\请求[tenderID].'

在表1和表2之间必须显示

tender tendername clientinfo tenderstart created byuser ziparea id ziparea customerid ... 
1 test thisisatest 12.12.1234 31.03.14 02:52 roy 24 50 10400 ...
1 test thisisatest 12.12.1234 31.03.14 02:52 roy 24 51 13723 ...
1 test thisisatest 12.12.1234 31.03.14 02:52 roy 24 52 23720 ...
1 test thisisatest 12.12.1234 31.03.14 02:52 roy 24 53 11237 ...
1 test thisisatest 12.12.1234 31.03.14 02:52 roy 24 54 24216 ...
您可以使用php来显示所需的结果

编辑 要想按需要打印,可以执行以下操作:

$tenderid = -1;
while($tender = mysql_fetch_array($result)) {
    if($tenderid != $tender["tenderid"]){
       $tenderid = $tender["tenderid"]
       echo $tender["tenderid"]. " ". $tender["tendername"] ... $tender["ziparea"];
     }
   echo $tender["id"]. " " . $tender["customerid"] ... "<br />";
$result = mysql_query("SELECT * FROM table1 WHERE tenderID='".$_REQUEST["tenderID"]."'");

print '<table>';
while($tender = mysql_fetch_array($result)) {
    print '<tr>';
    # Print your table1 columns
    print '<td>'.$tender['tenderID'].'</td>';
    ⋮
    print '<td>'.$tender['byUser'].'</td>';

    # Now loop on table2. The counter variable is to keep it neat.
    $zip_counter = 0;
    $zippy = $tender["ziparea"];
    $zipResult = mysql_query("SELECT * FROM table2 WHERE ziparea = '".$zippy."'");
    while($zip = mysql_fetch_array($zipResult)) {
        if ($zip_counter > 0) {
            # On table2 rows after the first, start the table row,
            # then print a blank column for each table1 column
            print '<tr>'
            print '<td/>';
            ⋮
            print '<td/>';
        }

        # Print the table2 columns
        print '<td'>.$zip['ziparea'].'</td>';
        ⋮
        print '<td'>.$zip['mail'].'</td>';
        print '</tr>';

        $zip_counter++;
    }
}
print '</table>';

}

表之间存在一对一或多关系。如果您加入它们,您将得到表1中的列对每个表2行的重复。这就是它的工作原理

如果您试图通过向屏幕截图谎报文件类型,在HTML或Excel中复制屏幕截图的输出,则可以执行table1查询,打印table1列,然后循环table2查询,在第一行之后为每行打印空白列。大概是这样的:

$tenderid = -1;
while($tender = mysql_fetch_array($result)) {
    if($tenderid != $tender["tenderid"]){
       $tenderid = $tender["tenderid"]
       echo $tender["tenderid"]. " ". $tender["tendername"] ... $tender["ziparea"];
     }
   echo $tender["id"]. " " . $tender["customerid"] ... "<br />";
$result = mysql_query("SELECT * FROM table1 WHERE tenderID='".$_REQUEST["tenderID"]."'");

print '<table>';
while($tender = mysql_fetch_array($result)) {
    print '<tr>';
    # Print your table1 columns
    print '<td>'.$tender['tenderID'].'</td>';
    ⋮
    print '<td>'.$tender['byUser'].'</td>';

    # Now loop on table2. The counter variable is to keep it neat.
    $zip_counter = 0;
    $zippy = $tender["ziparea"];
    $zipResult = mysql_query("SELECT * FROM table2 WHERE ziparea = '".$zippy."'");
    while($zip = mysql_fetch_array($zipResult)) {
        if ($zip_counter > 0) {
            # On table2 rows after the first, start the table row,
            # then print a blank column for each table1 column
            print '<tr>'
            print '<td/>';
            ⋮
            print '<td/>';
        }

        # Print the table2 columns
        print '<td'>.$zip['ziparea'].'</td>';
        ⋮
        print '<td'>.$zip['mail'].'</td>';
        print '</tr>';

        $zip_counter++;
    }
}
print '</table>';
另一个选项是在一个查询中完成所有操作,然后忽略第一个查询后重复的table1值。这可能更可取,因为它保存了table2查询的设置和分解

$this_tender_id = $_REQUEST['tenderID'];
$result = mysql_query("SELECT t1.tenderID,
                              ⋮
                              t1.byUser,
                              t2.ziparea,
                              ⋮
                              t2.mail
                         FROM table1 t1
                         JOIN table2 t2 ON t2.ziparea = t1.ziparea
                        WHERE t1.tenderID = {$this_tender_id}
                      "
);

$row_counter = 0;

print '<table>';
while($row = mysql_fetch_array($result)) {
    print '<tr>';
    # For the first row, print the table1 columns,
    # otherwise print blank columns. 
    if ($row_counter == 0) {
        print '<td>'.$row['tenderID'].'</td>';
        ⋮
        print '<td>'.$row['byUser'].'</td>';
    }
    else {
        print '<td/>';
        ⋮
        print '<td/>';
    }

    # Print the table2 columns
    print '<td'>.$row['ziparea'].'</td>';
    ⋮
    print '<td'>.$row['mail'].'</td>';
    print '</tr>';

    $row_counter++;
}
print '</table>';

为什么不在表之间进行连接?警觉的如果我加入它们,我也会遇到同样的问题,因为表2中的'ziparea'列有多个条目。。。。如果我使用它,它会给我5倍相同的投标名称,即使只有一个投标名称。。。它似乎填满了表2中的行。。。这将复制我的html内容5xyes,但如果我想输出,我将得到5倍这是一个测试,这意味着我的网页内容将复制。。。这就是问题所在。。。。我已经在第一次查询中尝试了限制1,但即使使用限制1,我也会得到5个输出,这不是一个问题。是正常情况,因为连接。你不能简单地做回音。你必须迭代你的结果,一种你需要显示的格式,我如何迭代结果,表1的所有信息只有一个输出?但是,当我输出$tender[tender Name]时,它将输出5次测试,否?否。它只打印一次。因为打印$tender[投标名称]只会导致投标ID发生变化。在您的情况下,您只有一个tenderid,然后只打印一次谢谢您的回答。。。我很抱歉看到这张照片,但现在你误解了。。。我从来不想用我的php输出复制屏幕截图,屏幕截图应该只显示表结构。。。。。我的输出在这个php页面上,问题是,表1中的数据是repeater。当我用while语句输出它时,我得到的web内容是原来的5倍。。。啊,我现在明白了。同样的原则仍然适用。抑制冗余的Das ist ein测试部分,并重复从table2查询创建的所需部分。而且,@markbaker是非常正确的。你真的应该清理你的输入。看见