所以这是我第一次正确接近INNER JOIN声明并且我一直在尝试它,不用说它不顺利。以下是我的页面代码:
<?php require_once('Connections/reps.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_reps, $reps);
$query_orders = "SELECT * FROM orders";
$orders = mysql_query($query_orders, $reps) or die(mysql_error());
$row_orders = mysql_fetch_assoc($orders);
$totalRows_orders = mysql_num_rows($orders);
mysql_select_db($database_reps, $reps);
$query_staff = "SELECT * FROM staff";
$staff = mysql_query($query_staff, $reps) or die(mysql_error());
$row_staff = mysql_fetch_assoc($staff);
$totalRows_staff = mysql_num_rows($staff);
mysql_select_db($database_reps, $reps);
$query_products = "SELECT * FROM products";
$products = mysql_query($query_products, $reps) or die(mysql_error());
$row_products = mysql_fetch_assoc($products);
$totalRows_products = mysql_num_rows($products);
mysql_select_db($database_reps, $reps);
$join = "SELECT
orders.ID AS id,
orders.CustomerName AS customerName,
orders.StaffMember AS staffMember,
orders.SalesPrice AS salesPrice,
orders.ListPrice AS listPrice,
orders.AgeOfPayment AS productAge,
orders.Product AS productName,
orders.Quantity AS orderQuantity,
orders.DateOfOrder AS orderDate,
staff.Bonus AS staffBonus,
products.Price AS productPrice
FROM
orders AS orders
INNER JOIN staff AS staff ON orders.StaffMember = staff.StaffName
INNER JOIN products AS products ON orders.Product = products.ProductName
ORDER BY
orderDate ASC";
$joinresult = mysql_query($join);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<?php
require_once("models/config.php");
if (!securePage($_SERVER['PHP_SELF'])){die();}
require_once("models/header.php");
?>
</head>
<body>
<div id='wrapper'>
<div id='top'>
<div id='logo'></div>
</div>
<div id='content'>
<h1></h1>
<h2>Change This</h2>
<div id='left-nav'>
<?php include("left-nav.php"); ?>
</div>
<div id='main'>
<div id ="orderstable">
<table border="1" cellpadding="1" cellspacing="3">
<tr>
<th>Order ID</th>
<th>Customer Name</th>
<th>Product</th>
<th>Quantity</th>
<th>Sales Price (€)</th>
<th>Total Sale (€)</th>
<th>List Price (€)</th>
<th>Price Difference (€)</th>
<th>% Difference</th>
<th>Sold By</th>
<th>Order Date</th>
<th>Age of Payment</th>
<th>Bonus %</th>
<th>Bonus Amount</th>
</tr>
<?php do { ?>
<?php do { ?>
<tr>
<td align="center" valign="middle"><?php echo $row_orders['ID']; ?></td>
<td align="center" valign="middle"><?php echo $row_join['customerName']; ?></td>
<td align="center" valign="middle"><?php echo $row_join['product']; ?></td>
<td align="center" valign="middle"><?php echo $row_orders['Quantity']; ?></td>
<td align="center" valign="middle"><?php echo $row_orders['SalesPrice']; ?></td>
<td align="center" valign="middle"><?php $first_multiply = $row_orders['Quantity'];
$second_multiply = $row_orders['SalesPrice'];
$multiply_total = $first_multiply * $second_multiply;
echo ($multiply_total); ?></td>
<td align="center" valign="middle"><?php echo $row_orders['Price']; ?></td>
<td align="center" valign="middle"><?php $first_number = $row_orders['Price'];
$second_number = $row_orders['SalesPrice'];
$sum_total = $first_number - $second_number;
echo ($sum_total); ?></td>
<td align="center" valign="middle">as</td>
<td align="center" valign="middle"><?php echo $row_join['staffMember']; ?></td>
<td align="center" valign="middle"><?php echo date('d/m/Y', $row_orders['orderDate']); ?></td>
<td align="center" valign="middle"></td>
<td align="center" valign="middle"><?php echo $row_orders['bonus']; ?>%</td>
<td align="center" valign="middle"> </td>
</tr>
<?php } while ($row_orders = mysql_fetch_assoc($orders));?>
<?php } while ($row_join = mysql_fetch_array($join));?>
</table>
</div>
</div>
<div id='bottom'></div>
</div>
</body>
</html><?php
mysql_free_result($orders);
mysql_free_result($staff);
mysql_free_result($products);
?>
我基本上要做的是以下内容:
任何人都可以指出我正确的方向我做错了吗?
答案 0 :(得分:0)
我会像这样加入:
$join = "SELECT o.ID id,
o.CustomerName customerName,
o.StaffMember staffMember,
o.SalesPrice salesPrice,
o.ListPrice listPrice,
o.AgeOfPayment productAge,
o.Product productName,
o.Quantity orderQuantity,
o.DateOfOrder orderDate,
s.Bonus staffBonus,
p.Price productPrice
FROM
orders o,
staff s,
products p
WHERE
o.StaffMember = s.StaffName
AND
o.Product = p.ProductName
ORDER BY
orderDate";
由于加入3个表时有2个条件,因此您将获得所有结果。您可以在另一个AND
中放置orders
表中唯一的内容,并获取有关特定订单的信息。
答案 1 :(得分:0)
需要注意的一点是,现在PHP中不推荐使用mysql_函数。您可能希望切换到mysqli_(与mysql_类非常相似)或PDO。
答案 2 :(得分:0)
SELECT
o.ID,
o.CustomerName,
o.StaffMember,
o.SalesPrice,
o.ListPrice,
o.AgeOfPayment,
o.Product,
o.Quantity,
o.DateOfOrder,
s.Bonus,
p.Price
FROM
`orders` o
INNER JOIN staff AS s ON o.StaffMember = s.StaffName
INNER JOIN products AS p ON o.Product = p.ProductName
WHERE o.StaffMember = s.StaffName
AND o.Product = p.ProductName
ORDER BY
orderDate ASC";
但是,我觉得你的桌子构造不好。我建议使用ID而不是Product = ProductName等。