根据mysql查询更改表中的字段

时间:2014-03-06 13:02:41

标签: php mysql

我正在创建的原型软件使用MVC框架。

我正在尝试将allowed表中的entrylog字段更改为“Y”(是)或“N”(否),具体取决于与驱动程序关联的卡是否已获得授权或不。

涉及的四个表是carddriverstateentrylog表。还有一个card_driver表,它将卡与驱动程序相关联。

CREATE TABLE IF NOT EXISTS `card` (
    `id`           int(11)     NOT NULL auto_increment,
    `startdate`    date        NOT NULL,
    `enddate`      date        NOT NULL,
    `state_id`     int(11)     NOT NULL,
    `referred_as`  varchar(40) NOT NULL,
    PRIMARY KEY  (`id`)
);

CREATE TABLE IF NOT EXISTS `driver` (
    `id`           int(11)     NOT NULL auto_increment,
    `title`        varchar(40) default NULL,
    `supplier_id`  int(11)     NOT NULL,
    `referred_as`  varchar(40) NOT NULL,
    PRIMARY KEY  (`id`)
);

CREATE TABLE IF NOT EXISTS `card_driver` (
    `card_id`      int(11)     NOT NULL,
    `driver_id`    int(11)     NOT NULL
);

CREATE TABLE IF NOT EXISTS `state` (
    `id`           int(11)     NOT NULL auto_increment,
    `referred_as`  varchar(40) NOT NULL,
    PRIMARY KEY  (`id`)
);

CREATE TABLE IF NOT EXISTS `entrylog` (
    `id`           int(11)     NOT NULL auto_increment,
    `vehicle_id`   int(11)     NOT NULL,
    `driver_id`    int(11)     NOT NULL,
    `venue_id`     int(11)     NOT NULL,
    `supplier_id`  int(11)     NOT NULL,
    `deliverydate` date        NOT NULL,
    `allowed`      binary(1)   NOT NULL default 'N',
    PRIMARY KEY  (`id`)
);

在驱动程序表中,我目前有代码检查所选驱动程序关联卡的授权。我想将这个类似的代码应用于条目日志,这样当使用表单输入交付时,它会自动确定“允许”字段。检查驱动程序表中驱动程序授权的代码如下:

if ($name == driver) {
?>
    <? include('common.php') ?>

<?php
if(isset($_POST['check']))
{
$conn = mysql_connect($server, $db_user, $db_pass);
if(! $conn )
{
 die('Could not connect: ' . mysql_error());
}

$id = $_POST['id'];



$sql ="SELECT *
  FROM driver AS d 
INNER
  JOIN card_driver AS cd
    ON cd.driver_id = d.id
INNER
  JOIN card AS c
    ON c.id = cd.card_id     
 WHERE d.ID = $id";
mysql_select_db('damp');
$result = mysql_query( $sql, $conn );
$row = mysql_fetch_assoc($result);
switch($row['state_id'])
{
case "1":
   echo "<strong><font color=\"green\">Authorisation Granted!</font></strong>";
   break;
case "2":
   echo "<strong><font color=\"red\">Your card has expired and authorisation is denied</font></strong>";
   break;
case "3":
   echo "<strong><font color=\"red\">Your card has been cancelled and authorisation is denied</font></strong>";
   break;
default:
   echo "<strong><font color=\"red\">The Card ID does not exist</font></strong>";
}

感谢您的帮助或建议您给我。

编辑:来自controller_create.php的代码

  if ($class_obj == "entrylog")
  {
    $id = $_POST['id'];
    $driverid = MyActiveRecord::FindById('driver',$this_obj->driver_id);
    $query = mysql_query("SUPDATE entrylog el
INNER JOIN driver AS d ON d.driver_id = el.driver_id 
INNER JOIN card_driver AS cd ON cd.driver_id = d.id
INNER JOIN card AS c ON c.id = cd.card_id     
SET el.allowed = CASE WHEN c.state_id = 1 
                      THEN 'Y' 
                      ELSE 'N' 
                 END
WHERE el.ID = $entryLogId");

mysql_select_db('damp');
  }

1 个答案:

答案 0 :(得分:0)

不完全清楚你在问什么,但以下内容可能有所帮助:

UPDATE entrylog el
INNER JOIN driver AS d ON d.id = el.driver_id 
INNER JOIN card_driver AS cd ON cd.driver_id = d.id
INNER JOIN card AS c ON c.id = cd.card_id     
SET el.allowed = CASE WHEN c.state_id = 1 
                      THEN 'Y' 
                      ELSE 'N' 
                 END
WHERE el.ID = $entryLogId

根据您最近的评论,听起来这个值应该计算为INSERT的一部分,而不是UPDATE之后。