Php 2个MySQL查询不能合并?
我得到了以下两个mysql\u查询: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
$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是非常正确的。你真的应该清理你的输入。看见