0

所以这是我第一次正确处理 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">&nbsp;</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);
?>

我基本上想做的是以下几点:

  • 从之前的页面提交订单。数据存储在数据库中的表上并回显。
  • 有问题的三个表是员工、订单和产品表
  • 我根据 ID 而不是值保存了表单。我已经用谷歌搜索并研究了 INNER JOIN,我尝试了以下方法,但没有成功。

谁能指出我做错了什么的正确方向?

4

3 回答 3

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";

since you have 2 conditions when joining 3 tables, you will get all results. You can put in another AND where you present something unique to the orders table and get this information about a specific order.

于 2013-04-10T13:38:53.017 回答
0

One thing to note is that mysql_ functions are deprecated in PHP now. You may want to switch to mysqli_ (is very comparable to the mysql_ class) or PDO.

于 2013-04-10T13:41:12.407 回答
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";

However, I have a feeling that your tables are not constructed well. I would suggest using IDs instead of Product = ProductName etc.

于 2013-04-10T13:44:04.747 回答