我得到了以下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 ',但是它总是为每个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的结构:
发布于 2014-04-01 21:10:59
你错了。连接查询选择*从table1 t1,table2 t2 on t1.ziprea=t2.ziprea tenderID=‘’.$_REQUEST“tenderID”。
在table1和table2之间必须向您显示
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 />";}
发布于 2014-04-01 21:48:35
两张桌子之间有一对一或更多的关系。如果您对每个JOIN行重复使用table1中的列,则会对它们进行重复。这就是它的工作原理。
如果您要做的是在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>';https://stackoverflow.com/questions/22796155
复制相似问题