如何在一行中获得两个select语句的结果?

时间:2011-06-14 09:32:13

标签: php mysql sql select statements

我在php页面中使用了两个选择的语句,如下所示:

$num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");

目前使用单独的while循环显示结果如下

while($nval=  mysql_fetch_array($num1))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";
        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

$num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");
print $num2;

print "<table border='0' width='875' align='center'>

<tr><td colspan=5 height=10></td></tr>
<tr>
    <td width='200' bgcolor='#99CCF5' align='center'><b>Country</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Mid</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>Low</b></td>
    <td width='70' bgcolor='#99CCF5' align='center'><b>High</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Study Location</b></td>
    <td width='139' bgcolor='#99CCF5' align='center'><b>Reference</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Quality</b></td>
    <td width='89' bgcolor='#99CCF5' align='center'><b>Relevance</b></td>
    <td width='61' ></td>
</tr>";

while($nval=  mysql_fetch_array($num2))
{
    $vv=$nval['SId'];

    $result = mysql_query("SELECT * FROM mtable WHERE SId='$vv'");

    while($row = mysql_fetch_array($result))
    {
        print "<tr height='18'>";
        print "<td width=200 align=left>" . $row['Country'] . "</td>";
        print "<td width=70 align=center>" . $row['MidEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['LowEstimate'] . "</td>";
        print "<td width=70 align=center>" . $row['HighEstimate'] . "</td>";
        print "<td width=89 align=center>" . $row['StudyLocation'] . "</td>";
        print "<td width=139 align=center>" . $row['ReferenceID'] . "</td>";
        print "<td width=89 align=center>" . $row['Quality'] . "</td>";
        print "<td width=89 align=center>" . $row['Relevance'] . "</td>";
        print "<td width=61><a href='/sites/default/files/popupboxCD.php?SId=$vv' onClick='openpopup(this.href);return false;'>".$row['Info']."</a></td>";

        print "</tr>";
        print "<tr height='1'><td colspan='9' style='padding:0'><hr size='0.5' color='#CCCCCC' noshade='noshade' /></td></tr>";
    }
}

我想知道是否有办法将这两个表合并到单个表中?

结果应如下所示:

  

Value1(查询。,例如.country共同),Value2(来自第一个查询),Value2(来自第二个查询)

我在mysql中只有一个表,它们都查询结果。


对不起,我的问题让所有人感到困惑。我是Lotus Notes Developer而不是PHP。所以我只是sql中的新手用户。

我再次重复我的询问......

目前我从一个表中得到两个表的显示结果。我想将这些结果混合在一个表中?

那是我的新表必须有三列。首先是来自第一表第二列的第二列和第二列的第二列的第二列和第二列的共同值。新表中的第二和第三列是主mysql数据中相同列的数据。

希望这比所有建议都好得多。我将自己尝试,如果成功,我会在这里发布。

3 个答案:

答案 0 :(得分:4)

使用UNION

( SELECT * FROM mtable WHERE SId= ? ) UNION (SELECT * FROM mtable WHERE SId= ?)

如果我理解你的意思 另请注意,在这种情况下,您可以简单地执行以下操作:

SELECT * FROM mtable WHERE SId= ? OR SId = ?

答案 1 :(得分:2)

我很抱歉,但我无法关注您正在寻找的输出/结果。我无法解释你的意思“结果应该来自单个表(php页面)国家,midestimate(来自第一个查询),midestimate(来自第二个查询)国家,midestimate(来自第一个查询),midestimate(来自2nd)查询)country,midestimate(来自第一个查询),midestimate(来自第二个查询)等等“

无论如何,我认为您不需要运行第一个SELECT语句来检索mtable.SId,然后运行其他多个SELECT(在循环内)以从mtable读取其他列。

我认为下面的单个查询应该有效,因为它合并了两个查询并返回一个结果集:

SELECT * FROM mtable 
WHERE (Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1')
OR (Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2');

答案 2 :(得分:1)

您的两个疑问:

  1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
  2. $num2 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen2' && Topic='$topic2' && Indicator='$ind2' && IndicatorSubGroup='$subind2' ");
  3. 它们仅在WHERE部分有所不同。您可以将它们与OR

    组合在一起进行组合
    mysql_query("
    SELECT SId FROM mtable 
      WHERE
        (
          Pathogen='$pathogen1' && Topic='$topic1' 
          && Indicator='$ind1' && IndicatorSubGroup='$subind1'
        )
        OR
        (
          Pathogen='$pathogen2' && Topic='$topic2' 
          && Indicator='$ind2' && IndicatorSubGroup='$subind2'
        )
    ");
    

    WHERE部分是一个表达式,也在Mysql手册中记录:Expression Syntax。有多种方式可以表达您正在寻找的内容,上面的例子只有一种方式。

    如果您需要有关SELECT声明的更多常规信息,请在此处记录:SELECT Syntax


    我首先认为这听起来像是一个JOIN的工作,但后来我发现你只有一个名为mtable的表,所以根本不需要连接或联合,你可以用一个简单的选择来编写它查询一个表:

    SELECT * FROM mtable WHERE Pathogen='$pathogen2' AND Topic='$topic2' AND Indicator='$ind2' AND IndicatorSubGroup='$subind2'
    

    代替。它应该返回您感兴趣的所有记录。

    您的查询

      

    mtable包含country,midestimate等列。两个select语句使用不同的参数搜索同一个表。和结果应该在单个表(php页)国家,midestimate(来自第一个查询),midestimate(来自第二个查询)国家,midestimate(来自第一个查询),midestimate(来自第二个查询)国家,midestimate(来自第一个查询) ,midestimate(来自第二个查询)等等。 thanx的回复 - Gopipuli 42分钟前

    您曾要求将这两个查询合并为一个。那是可能的。你写的你有两个选择语句。我试着从你的问题中收集它们:

    1. $num1 = mysql_query("SELECT SId FROM mtable WHERE Pathogen='$pathogen1' && Topic='$topic1' && Indicator='$ind1' && IndicatorSubGroup='$subind1' ");
    2. `$ num2 = mysql_query(“SELECT SId FROM mtable WHERE Pathogen ='$ pathogen2'&amp;&amp; Topic ='$ topic2'&amp;&amp;&amp; Indicator ='$ ind2'&amp;&amp; IndicatorSubGroup ='$ subind2 '“);
    3. 这两个查询有一部分 `


      如果您需要从两个或多个表中获取数据:

      如上所述,首先对我来说听起来像JOIN。使用联接,您可以根据两者之间的引用组合结果中多个表的数据。引用需要在查询中表达。

      更为一般性的解释是WikipediaMysql manual has the syntax

      SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a
      

      这会为t1等于t2的每件商品选择表格t2.a和表格t1.a中的所有字段。

      如果可以,最后可以添加where子句,当然,您可以仅使用要返回的列名替换*。由于你现在有两个表,如果你的表有重复的列名,你需要在列前面加上它的表前缀,否则Mysql不知道选择哪一个。