首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2 MySQL查询不能合并?

2 MySQL查询不能合并?
EN

Stack Overflow用户
提问于 2014-04-01 20:24:14
回答 2查看 64关注 0票数 0

我得到了以下2 mysql_queries:

代码语言:javascript
复制
$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)) {
        ....
    }
}

第一个查询的工作方式是我希望它正常工作。

table1有列' ziparea ',但是它总是为每个for区域(01到99)只有一个条目的总是。table2也有列' ziparea ',但是它有时对于每个has区域有超过1个条目(例如: has区域‘24’有5个条目;意味着5行)

我需要两个表中的所有信息,我试图将两个查询合并为"JOIN",但是我无法解决这个问题,这个问题也存在于顶部的代码中。

问题是,尽管table1中只有一个条目,但它总是给出与table2为查询2提供的行数一样多的行。

这意味着如果and区域为24,而在table1中只有1行,而and区域为“24”(当然,只有1行与匹配的tenderID),但是table2对于and区域“24”有5行,那么查询1中的值将是相同值的5倍。

我真搞不懂为什么。

也许你有解决办法给我。

table1和table2的结构:

http://i.stack.imgur.com/YAXF6.png

EN

回答 2

Stack Overflow用户

发布于 2014-04-01 21:10:59

你错了。连接查询选择*从table1 t1,table2 t2 on t1.ziprea=t2.ziprea tenderID=‘’.$_REQUEST“tenderID”。

在table1和table2之间必须向您显示

代码语言:javascript
复制
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来显示所需的结果。

编辑

为了像你想要的那样打印,你可以这样做:

代码语言:javascript
复制
$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 />";

}

票数 0
EN

Stack Overflow用户

发布于 2014-04-01 21:48:35

两张桌子之间有一对一或更多的关系。如果您对每个JOIN行重复使用table1中的列,则会对它们进行重复。这就是它的工作原理。

如果您要做的是在HTML中复制屏幕截图中的输出(或者在Excel中对其进行关于文件类型的欺骗),您可以执行table1查询,打印table1列,然后在table2查询上循环,在第一行之后打印空白列。就像这样:

代码语言:javascript
复制
$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查询的设置和拆卸。

代码语言:javascript
复制
$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>';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22796155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档