内部加入& PHP

时间:2013-04-10 13:27:37

标签: php sql inner-join

所以这是我第一次正确接近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,我尝试了下面没有用的。

任何人都可以指出我正确的方向我做错了吗?

3 个答案:

答案 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等。