我得到了以下2个mysql_queries:
$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',但每个ziparea(01到99)只有始终一个条目。 table2也有“ziparea”列,但有时每个ziparea有超过1个条目(例如:ziparea'24'有5个条目;表示5行)
我需要来自两个表的所有信息,我尝试将两个查询与“JOIN”合并,但我无法解决问题,这也存在于顶部的代码中。
问题是,即使table1中只有一个条目 - 它总是提供尽可能多的行,因为table2将为查询2提供。
表示如果ziparea为24,而table1只有1行,带有ziparea'24'(当然只有1行带有匹配的tenderID),但table2有5行为ziparea'24',将有5行从查询一次乘以相同的值。
我无法弄清楚原因。
也许你有解决方案。
table1和table2的结构:
答案 0 :(得分:0)
必须显示
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 />";
}
答案 1 :(得分:0)
表之间存在一对一或多关系。如果你JOIN
他们,你会得到table1的列,每个table2行重复一次。这就是它的工作原理。
如果您要做的是从HTML中复制屏幕截图中的输出(或者在Excel中通过说明文件类型),您可以执行table1查询,打印table1列,然后循环table2查询,打印第一行后的每一行的空白列。像这样:
$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>';