问题描述
|
我在PHP页面中使用两个选择语句,如下所示:
@H_404_1@$num1 = MysqL_query(\"SELECT SId FROM mtable WHERE Pathogen=\'$pathogen1\' && Topic=\'$topic1\' && Indicator=\'$ind1\' && IndicatorSubGroup=\'$subind1\' \");
和
@H_404_1@$num2 = MysqL_query(\"SELECT SId FROM mtable WHERE Pathogen=\'$pathogen2\' && Topic=\'$topic2\' && Indicator=\'$ind2\' && IndicatorSubGroup=\'$subind2\' \");
目前,结果使用单独的while循环显示,如下所示
@H_404_1@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>\";
}
}
和
@H_404_1@$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(两个查询都通用,例如国家/地区),Value2(来自第一个查询),Value2(来自第二个查询)
我在MysqL中只有一个表,两个表都显示结果。
对不起,我的问题使所有人感到困惑。我是Lotus Notes Developer,而不是PHP。所以我只是sql的新手。
在这里我再次重复我的查询...
目前,我从单个表的两个查询中得到了两个表的显示结果。我想将这些结果混合在一个表中吗?
那就是我的新表必须有三列。首先是具有共同值的表,两个表分别来自第一表的第二列和第二表的第二列。新表中的第二列和第三列显示的是来自主要MysqL数据的同一列中的数据。
希望这对所有建议都更好。我会自己尝试,如果成功,我会在这里发布。
解决方法
与UNION
( SELECT * FROM mtable WHERE SId= ? ) UNION (SELECT * FROM mtable WHERE SId= ?)
如果我正确理解你的意思
还请注意,在这种情况下,对于这种简单情况,您可以简单地执行以下操作:
SELECT * FROM mtable WHERE SId= ? OR SId = ?
, 很抱歉,我无法追踪您想要的输出/结果。我无法解释您的意思是“结果应出现在单个表(php页面)国家,中间估计(来自第一个查询),中间估计(来自第二个查询)国家,中间估计(来自第一个查询),中间估计(来自第二个查询)国家/地区,中间估算值(来自第一个查询),中间估算值(来自第二个查询)等等”
无论如何,我认为您不需要运行第一个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\');
, 您的两个查询:
$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\' \");
它们仅在“ 9”部分有所不同。您可以通过将它们与ѭ10组合在一起来组合它们:
mysql_query(\"
SELECT SId FROM mtable
WHERE
(
Pathogen=\'$pathogen1\' && Topic=\'$topic1\'
&& Indicator=\'$ind1\' && IndicatorSubGroup=\'$subind1\'
)
OR
(
Pathogen=\'$pathogen2\' && Topic=\'$topic2\'
&& Indicator=\'$ind2\' && IndicatorSubGroup=\'$subind2\'
)
\");
“ѭ9”部分也是一个表达式,该表达式也记录在Mysql手册中:表达式语法。有多种表达您想要的内容的方法,上面的示例只是一种方法。
如果需要有关SELECT
语句的更多常规信息,请在此处记录:SELECT语法。
我首先认为这听起来像是JOIN的工作,但后来我看到您只有一个叫mtable
的表,因此根本不需要联接或联合,您可以在一个表上使用简单的select查询编写它:
SELECT * FROM mtable WHERE Pathogen=\'$pathogen2\' AND Topic=\'$topic2\' AND Indicator=\'$ind2\' AND IndicatorSubGroup=\'$subind2\'
代替。它应该返回您感兴趣的所有记录。
您的查询
mtable包含country,midestimate等列。两个select语句使用不同的参数搜索同一张表。结果应该在单个表(php页)中出现国家,中间估计(来自第一个查询),中间估计(来自第二个查询)国家,中间估计(来自第一个查询),中间估计(来自第二个查询)国家,中间估计(来自第一个查询) ,中间估算值(来自第二个查询)等等。感谢thanx – Gopipuli 42分钟前
您要求将这两个查询合并为一个。那是可能的。您写有两个选择语句。我尝试从您的问题中收集它们:
$num1 = mysql_query(\"SELECT SId FROM mtable WHERE Pathogen=\'$pathogen1\' && Topic=\'$topic1\' && Indicator=\'$ind1\' && IndicatorSubGroup=\'$subind1\' \");
$ num2 = mysql_query(\“从mtable WHERE Pathogen = \'$ pathogen2 \'&& Topic = \'$ topic2 \'&& Indicator = \'$ ind2 \'&& IndicatorSubGroup = \'$ subind2 \'\” );
那两个查询有一部分
`
如果您需要从两个或多个表中获取数据:
如所写,首先对我来说听起来像是ѭ17。使用联接,您可以基于两个表之间的引用来组合结果中多个表中的数据。需要在查询中制定参考。
在Wikipedia上有更一般的解释,Mysql手册具有语法。
SELECT * FROM t1 LEFT JOIN t2 ON t2.a=t1.a
这将为t2.a
等于ѭ22product的每种产品从表t1
和表t2
中选择所有字段。
您可以在末尾添加where子句,并且自然可以用仅要返回的列名替换you23ѭ。由于现在有两个表,因此如果表中的列名重复,则需要在表的前缀前加上列的前缀,否则Mysql将不知道要选择哪个。