帮助语法并向查询添加表和条件

时间:2010-02-16 01:23:22

标签: php sql

<?php

switch($_GET["action"])
{
case "add_item":
{
AddItem($_GET["idc"], $_GET["qty"]);
ShowCart();
break;
}
case "update_item":
{
UpdateItem($_GET["idc"], $_GET["qty"]);
ShowCart();
break;
}
case "remove_item":
{
RemoveItem($_GET["idc"], $_GET["id"]);
ShowCart();
break;
}
default:
{
ShowCart();
}
}
function AddItem($itemId, $qty){


$result = mysql_query("SELECT COUNT(*) FROM cart WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");

$row = mysql_fetch_row($result);
$numRows = $row[0];

if($numRows == 0)
{
// This item doesn't exist in the users cart,
// we will add it with an insert query

mysql_query("INSERT INTO cart(cookieId, id, qty) values('" . GetCartId() . "', $itemId, $qty)");
//printf ("Inserted records: %d\n", mysql_affected_rows());

}
else
{
// This item already exists in the users cart,
// we will update it instead
 mysql_query("UPDATE cart SET qty = $qty WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");

}

}

function UpdateItem($itemId, $qty)
{

mysql_query("UPDATE cart SET qty = $qty WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
//printf ("Updated records: %d\n", mysql_affected_rows());

}

function RemoveItem($itemId) 
{

mysql_query("DELETE FROM cart WHERE cookieId = '" . GetCartId() . "' AND id = $itemId");
}

?>

<?php 
function ShowCart()

{
    $result = mysql_query("SELECT
                  cart.id         cart_id,
                  cart.id         cart_id,
                  cart.cartId     cartId,
                  cart.cookieId   cookie_Id,
                  cart.qty        qt_y,                     
                  cdkb.id         cdkb_id,
                  cdkb.name       name,
                  cdkb.image      image,
                  cdkb.price      price,
                  dkb.id          dkb_id,
                  dkb.name        name1, 
                  dkb.image       image1,
                  dkb.price       price2,
                  dbl.product_id  product_id,
              dbl.price       price3,
              dbl.variety     variety,
              dbl.description description                  
FROM
        cart


        LEFT OUTER JOIN cdkb
           ON cart.id = cdkb.id    

        LEFT OUTER JOIN dkb
           ON cart.id = dkb.id

        LEFT OUTER JOIN dbl
           ON dbl.id = dkb.id 


    WHERE
        cart.cookieId ='" . GetCartId() . "' ' ORDER BY cdkb.name AND dkb.name ASC");

    <div id="cart">
<div id="group">
<div id="quantity">Qty</div>
<div id="cartpic">Pic</div>
<div id="product">Product</div>
<div id="cartprice">Price</div>
<div id="remove">Remove</div>
</div>
<?php

$totalCost=0;
while($row = mysql_fetch_array($result))
{  
// Increment the total cost of all items
$totalCost += ($row["qt_y"] * $row["price1"]);

?>

<div id="cart1">
<select name="<?php echo $row["ckb_id"];?>" onChange="UpdateQty(this)">
<?php  print($row["ckb_id"]);?>
<?php

for($i = 1; $i <= 30; $i++)
{
echo "<option ";
if($row["qt_y"] == $i)
{
echo " SELECTED ";
}
echo ">" . $i . "</option>";
}
?>
</select>
</div>
<div id="cart2">
<img src="images/logopic.gif"<?php /*?><?php echo $row["image1"]; ?><?php */?> alt="we" width="60" height="50" />
</div>
<div id="cart3"><p><?php echo $row["dishname1"]; ?></p></div>



<div id="cart4"><p>
$<?php echo number_format($row["price3"], 2, ".", ","); ?></p></div>

<div id="cart5">
<p><?php
printf('<a href="cart.php?action=remove_item&id=%d&idc=%d&register=%s">Remove</a>', $_GET['id'], $row['ckb_id'], $_GET['register']);
?></p></div>

<hr size="1" color="red" >

<script language="JavaScript">

function UpdateQty(item)
{
itemId = item.name;
newQty = item.options[item.selectedIndex].text;

document.location.href = 'cart.php?action=update_item&id='+itemId+'&qty='+newQty;
}

</script>





<?php
}
?>

<font face="verdana" size="2" color="black" style="clear:right;">
<b>Total: $<?php echo number_format($totalCost, 2, ".", ","); ?></b></font></td>


<?php
}
?>

以上是cart.php的更新代码和查询。如果您在查询下方注意到有一个while循环。现在,while循环完美地设置为dkb表,这些是来自page1.php的项目。这个循环的设置方式是它将重复保存,显示和管理ecah项目数量,图像,名称,价格和删除选项,显示它们并重复它们用户选择的项目。那些字段设置和设计并不完全适用于来自page2.php的项目,其中显示在购物车中的信息从表格dkb和dbl中拉出来。现在的问题是,当从page2.php到购物车时,相同的项目名称会重复三次,因为在dbl表中设计如下。

INSERT INTO `dbl` (`id`, `price`, `variety`, `description`) VALUES
(1, 20.30, 'Small Tray', 'Serves 6 to 8 people' ),
(1, 25.90, 'Medium Tray', 'Serves 12 to 15 people'),
(1, 30.90, 'Large Tray', 'Serves 18 to 21 people'),
(136, 0.00, 'Small Tray', '', 'small'),
(136, 0.00, 'Medium Tray', '' ),
(136, 0.00, 'Large Tray', ''),
(2, 0.00, 'Small Tray', ''),
(2, 0.00, 'Medium Tray', ''),
(2, 0.00, 'Large Tray', '');

上面的插入假设是dkb的三个项目,请参阅dbl.id,它在查询dbl.id = dkb.id中的dkb.id上加入了dbl.id对dkb表中的一个项目有三个价格,其中包含案例是项目1的三个价格,项目136的三个价格和项目2的三个价格。因此它是三种不同的品种,并且描述了dkb中的每个项目。从现在开始,如果你看一下在查询下面的while循环中分配的字段,其中一些是来自cdkb和dbl的其他dkb。 Rigth现在正如我所说的那样,来自dkb表的信息来自while循环中的设置,只有一个价格和一个名称。我想的是安排一个if语句条件来检测信息来自page1.php这是一个名称和价格,还是来自page2.php,它将是一个名称,从一到三个价格和品种取决于用户选择的小型,中型或大型托盘。每个托盘都有一个价格,但它将是一个名称1,136或2,这些是来自dkb表的id。在while循环中的if语句中显示来自page2.php的信息,需要一到三个价格和变量将有一个foreach循环或者一个for循环不知道用户在第2页中选择多少种。 php使用if语句帮助将其显示在购物车中的while循环中,该语句将检测从page1.php或page2.php中选择的天气。

$result = mysql_query("SELECT * FROM .... LEFT OUTER JOIN .... WHERE") // This is the query we have discussed in this forum.
 while($row = mysql_fetch_array($result))
{  if($row['cdkb_id']){
echo "<div>qty</div>";
echo"<div>". $row['image'] . "</div>";
echo"<div>". $row['name'] . "</div>";
echo"<div>". $row['price'] . "</div>";
echo"<div>remove</div>";
}
else{
echo "<div>qty</div>";
echo"<div>". $row['image1'] . "</div>";
echo"<div>". $row['name1'] . "</div>";
foreach ($row['dkb_id'] as $variety) {
echo"<div>".$variety['variety']. $variety['price3'] . "</div>";
// the vriety and price3 field will display three times as in table dbl has three prices and three variety. It is correct to use a foreach loop for  in this case?}
echo"<div>remove</div>"; 
// end of foreach loop inside the else statement
}// end of if else statement
}// end of while loop
?>

因此,最终显示和插图将被搜索并作为最终产品呈现如下,这是所需的外观。

 while($row = mysql_fetch_array($result))
{  
if (table cdkb) { 
  [1]qyt         image      name          price        remove
     1            ---       marina        $18.90        remove?    
     }end of if statement
Else table dkb {
   1]qyt            Image         Name             Price                  Remove
     1               ---         marina         Small Tray  $18.90        remove? 
                                                Medium Tray $30.24
                                                Large Tray  $35.90
                  } // end of else statement

                  }//end of while loop

请给我最后一手。

2 个答案:

答案 0 :(得分:1)

为MySQL的此查询设置一些数据:

-- **********************************************************************
-- Table holding all the items in the users shopping cart, along with
-- a cookieId for thier session
-- **********************************************************************
Create table cart
   (
   cartId           integer,
   cookieId         integer,
   id               integer,
   qty              integer
   )
go

-- **********************************************************************
-- Table all the items available for sale with the price
-- **********************************************************************
Create table dkb
   (
   id               integer,
   name             varchar(20),
   price            decimal(12,2)
   )
go

-- **********************************************************************
-- Table that looks like the items table, but we have no idea why it is
-- here.
-- **********************************************************************
Create table cdkb
   (
   id               integer,
   name             varchar(20),
   price            decimal(12,2)
   )
go

-- **********************************************************************
-- Another table with a price in it .. a completely different id field
-- and a variety ... WTH is it for - No idea.
-- **********************************************************************
Create table dblv
   (
   dbl_id           integer,
   price            decimal(12,2),
   variety          varchar(20)
   )
go

insert into cart (cartid, cookieid, id, qty) values (1, 1, 1, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 2, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 3, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 4, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 5, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 6, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 7, 1);
go
insert into cart (cartid, cookieid, id, qty) values (1, 1, 8, 1);
go

insert into dkb (id, name, price) values (1,'my dkb 1', 10.00);
go
insert into dkb (id, name, price) values (2,'my dkb 2', 20.00);
go
insert into dkb (id, name, price) values (3,'my dkb 3', 30.00);
go
insert into dkb (id, name, price) values (4,'my dkb 4', 40.00);
go

insert into cdkb (id, name, price) values (5,'my cdkb 5', 50.00);
go
insert into cdkb (id, name, price) values (6,'my cdkb 6', 60.00);
go
insert into cdkb (id, name, price) values (7,'my cdkb 7', 70.00);
go
insert into cdkb (id, name, price) values (8,'my cdkb 8', 80.00);
go

insert into dblv (dbl_id, price, variety) values (1,1.99,'my dbl 1 variety');
go
insert into dblv (dbl_id, price, variety) values (2,1.99,'my dbl 2 variety');
go

然后是这个查询的结果:

SELECT
   cart.id    cart_id,
   dkb.id     dkb_id,
   cdkb.id    cdkb_id,
   cart.*,
   dkb.*,
   cdkb.*,
   dblv.*
FROM
    cart

    LEFT OUTER JOIN dkb
       ON cart.id = dkb.id

    LEFT OUTER JOIN dblv
       on dkb.id = dblv.dbl_id

    LEFT OUTER JOIN cdkb
       on cart.id = cdkb.id

结果显示为:

cart_id    dkb_id     cdkb_id    cartId     cookieId   id         qty        id         name                 price        id         name                 price        dbl_id     price        variety              
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -------------------- ------------ ---------- -------------------- ------------ ---------- ------------ -------------------- 
1          1          NULL       1          1          1          1          1          my dkb 1             10.00        NULL       NULL                 NULL         1          1.99         my dbl 1 variety     
2          2          NULL       1          1          2          1          2          my dkb 2             20.00        NULL       NULL                 NULL         2          1.99         my dbl 2 variety     
3          3          NULL       1          1          3          1          3          my dkb 3             30.00        NULL       NULL                 NULL         NULL       NULL         NULL                 
4          4          NULL       1          1          4          1          4          my dkb 4             40.00        NULL       NULL                 NULL         NULL       NULL         NULL                 
5          NULL       5          1          1          5          1          NULL       NULL                 NULL         5          my cdkb 5            50.00        NULL       NULL         NULL                 
6          NULL       6          1          1          6          1          NULL       NULL                 NULL         6          my cdkb 6            60.00        NULL       NULL         NULL                 
7          NULL       7          1          1          7          1          NULL       NULL                 NULL         7          my cdkb 7            70.00        NULL       NULL         NULL                 
8          NULL       8          1          1          8          1          NULL       NULL                 NULL         8          my cdkb 8            80.00        NULL       NULL         NULL                 
抱歉今天没多少时间 - 工作的漫长的一天。 :-)我明天再来看看..

答案 1 :(得分:0)

如果您单独选择所有选项,然后表格。*这可能是您的问题。

SELECT *
FROM
cart

LEFT OUTER JOIN dkb
   ON cart.id = dkb.id

LEFT OUTER JOIN cdkb
   on cart.id = cdkb.id

LEFT OUTER JOIN double
   on cart.id = double.id
WHERE 
cart.cookieId = GetCartId() AND cdkb.id IS NOT NULL