je un formulaire HTML que les utilisateurs de données d'entrée en ce que enregistre les valeurs dans deux tables MySQL, factures et LineItems. Lorsque vous cliquez sur le bouton "Enregistrer", ces valeurs sont insérées en tant que nouvelle ligne dans les factures et les éléments de ligne. La page s'actualise pour afficher le même formulaire, mais avec les valeurs entrées par l'utilisateur enregistrées dans les champs de saisie. La page Web a multiplier 'lineitems' l'utilisateur peut créer. Ces données sont enregistrées dans la table lineitems. Chaque ligne de facture a un identifiant unique qui est ajouté à chaque ligne que l'utilisateur crée. De cette façon, la facture peut obtenir chaque élément de ligne associé à la table lineitems. J'ai besoin d'effectuer un calcul de somme sur lineitems.quantity pour chaque facture et enregistrer la valeur à invoices.totalquantity.Mettre à jour la colonne de la table MySQL en utilisant la somme d'une valeur de php stockée dans un tableau
J'ai essayé la mise en place des déclencheurs sur la table LineItems lui-même, mais il ne parvient pas toujours. J'essaie maintenant de le faire du côté du programme.
MON CODE:
// LINE ITEMS CLASS
// ==============================================================================================
class lineitems{
var $queryresult = NULL;
function lineitems($db, $invoiceid, $invoicetype = "Order"){
$this->db = $db;
$this->invoiceid = ((int) $invoiceid);
$this->invoicetype = $invoicetype;
}//end method
function get(){
$querystatement = "
SELECT
products.partname,
products.partnumber,
products.claveid,
products.claveid2,
products.layupid,
lineitems.id,
lineitems.productid,
lineitems.quantity,
lineitems.nipple,
lineitems.polish,
lineitems.edgeseal,
lineitems.leads,
lineitems.leadsl,
lineitems.width,
lineitems.widthf,
lineitems.height,
lineitems.heightf,
lineitems.comment
FROM
lineitems LEFT JOIN products ON lineitems.productid = products.id
WHERE
invoiceid = ".$this->invoiceid."
ORDER BY
lineitems.displayorder";
/*
FROM
lineitems LEFT JOIN products ON lineitems.productid = products.id
WHERE
invoiceid = ".$this->invoiceid."
ORDER BY
lineitems.displayorder"; */
$this->queryresult = $this->db->query($querystatement);
}//end method
function show(){
if($this->queryresult === NULL)
$this->get();
$count = 1;
while($therecord = $this->db->fetchArray($this->queryresult)){
?><tr id="li<?php echo $count?>" class="lineitems">
<td colspan="2" class="lineitemsLeft" <?php if($this->invoicetype == "Void" || $this->invoicetype == "Invoice") echo 'nowrap="nowrap"'?>>
<input type="hidden" id="li<?php echo $count?>ProductID" value="<?php echo $therecord["productid"]?>"/>
<div>
<?php if($therecord["partnumber"] || $therecord["partname"]) {?>
<p><?php echo formatVariable($therecord["partnumber"]) ?></p>
<!-- <p class="important"><?//php echo formatVariable($therecord["partname"])?></p> -->
<?php } else
echo " ";
?>
</div>
</td>
<!-- <td><input id="li<?//php echo $count?>Memo" class="lineitemMemos" value="<?//php echo formatVariable($therecord["memo"])?>"/></td> -->
<!-- <td><input id="li<?////php echo $count?>Frontfinish" class="lineitemFrontfinishs" value="<?/////php echo formatVariable($therecord["frontfinish"])?>"/></td>
<td><input id="li<?////php echo $count?>Backfinish" class="lineitemBackfinishs" value="<?////php echo formatVariable($therecord["backfinish"])?>"/></td> -->
<td><input id="li<?php echo $count?>Comment" class="lineitemComments" value="<?php echo formatVariable($therecord["comment"])?>"/></td>
<td><input id="li<?php echo $count?>Nipple" class="lineitemNipples" value="<?php echo formatVariable($therecord["nipple"])?>"/></td>
<td><input id="li<?php echo $count?>Polish" class="lineitemPolishes" value="<?php echo formatVariable($therecord["polish"])?>"/></td>
<td><input id="li<?php echo $count?>Edgeseal" class="lineitemEdgeseals" value="<?php echo formatVariable($therecord["edgeseal"])?>"/></td>
<td><input id="li<?php echo $count?>Leads" class="lineitemLeadss" value="<?php echo $therecord["leads"]?>"/></td>
<td><input id="li<?php echo $count?>Leadsl" class="lineitemLeadsls" value="<?php echo $therecord["leadsl"]?>"/></td>
<!-- <td><input id="li<?///php echo $count?>RQ" class="lineitemRQs" value="<?///php echo $therecord["RQ"]?>"/></td> -->
<td><input id="li<?php echo $count?>Width" class="lineitemWidths" value="<?php echo $therecord["width"]?>"/></td>
<td> <input id="li<?php echo $count?>Widthf" class="lineitemWidthfs" value="<?php echo $therecord["widthf"]?>"/></td>
<td><input id="li<?php echo $count?>Height" class="lineitemHeights" value="<?php echo $therecord["height"]?>"/> </td>
<td> <input id="li<?php echo $count?>Heightf" class="lineitemHeightfs" value="<?php echo $therecord["heightf"]?>"/></td>
<!--
<td><input id="li<?///php echo $count?>Claveid" class="uneditable lineitemClaveids" value="<?////php echo formatVariable($therecord["claveid"])?>"/></td>
<td><input id="li<?////php echo $count?>Claveid2" class="uneditable lineitemClaveid2s" value="<?/////php echo formatVariable($therecord["claveid2"])?>"/></td>
-->
<td><input id="li<?php echo $count?>Quantity" class="lineitemQuantities" value="<?php echo formatVariable($therecord["quantity"])?>"/></td>
<td><input id="li<?php echo $count?>Sqft" class="uneditable lineitemSqfts" value="<?php echo formatVariable(ceil($therecord["width"]*$therecord["height"]/144)) ?>"/></td>
<td><input id="li<?php echo $count?>Sqfttot" class="uneditable lineitemSqfttots" value="<?php echo formatVariable (ceil($therecord["width"]*$therecord["height"]/144* $therecord["quantity"]))?>"/></td>
<!-- <td><input id="li<?///php echo $count?>unitweight" class=" uneditable lineitemUnitweight" value="<?///php echo $unitweight ?>"/></td> -->
<!-- <td><input id="li<?///php echo $count?>totalweight" class="uneditable lineitemTotalweight" value="<?///php echo $totalweight ?>"/></td> -->
<td class="lineitemsButtonTDs">
<div id="li<?php echo $count?>ButtonsDiv" class="lineitemsButtonDivs">
<button type="button" id="li<?php echo $count?>ButtonDelete" class="graphicButtons buttonMinus LIDelButtons" title="Remove line item"><span>-</span></button><br />
<button type="button" id="li<?php echo $count?>ButtonMoveUp" class="graphicButtons buttonUp LIUpButtons" title="Move Item Up"><span>Up</span></button><br />
<button type="button" id="li<?php echo $count?>ButtonMoveDown" class="graphicButtons buttonDown LIDnButtons" title="Move Item Down"><span>Dn</span></button><br />
</div>
</td>
</tr>
<?php
$count++;
}//endwhile
}//end method
function set($itemlist, $userid = NULL){
if(!$userid)
$userid = $_SESSION["userinfo"]["id"];
$deletestatement = "
DELETE FROM
lineitems
WHERE
invoiceid = ".$this->invoiceid;
$this->db->query($deletestatement);
$itemsArray = explode(";;", $itemlist);
$count = 0;
foreach($itemsArray as $item){
$itemRecord = explode("::", $item);
if(count($itemRecord) > 1){
$insertstatement ="
INSERT INTO
lineitems(
invoiceid,
productid,
comment,
nipple,
polish,
edgeseal,
leads,
leadsl,
width,
widthf,
height,
heightf,
quantity,
sqft,
sqfttot,
displayorder,
createdby,
creationdate,
modifiedby,
modifieddate
)
VALUES (
".$this->invoiceid.",
".((int) $itemRecord[0]).",
'".$itemRecord[1]."',
'".$itemRecord[2]."',
'".$itemRecord[3]."',
'".$itemRecord[4]."',
'".$itemRecord[5]."',
'".$itemRecord[6]."',
'".$itemRecord[7]."',
'".$itemRecord[8]."',
'".$itemRecord[9]."',
'".$itemRecord[10]."',
'".$itemRecord[11]."',
'".$itemRecord[12]."',
'".$itemRecord[13]."',
".$count.",
".$userid.",
NOW(),
".$userid.",
NOW()
)";
$this->db->query($insertstatement);
$count++;
}//end if
}//endforeach
}//end method
//this isn't actually updating my invoices table...
function updatesglitots() {
$sglitotalsupdate="UPDATE invoices i LEFT JOIN (SELECT invoiceid, SUM(quantity) AS sgtotqty FROM lineitems li GROUP BY invoiceid) AS t ON i.invoiceid = t.invoiceid SET i.totalquantity = t.sgtotqty WHERE i.invoiceid = ".$this->invoiceid."";
$this->db->query($sglitotalsupdate);
}
}//end class
}// end if
que je veux faire, soit quelque chose comme ceci:
"UPDATE invoices
SET totalquantity = SUM('".$itemRecord[11]."')
WHERE invoices.id = ".$this->invoiceid."
;"
NOTE: '. $ ItemRecord [11] "' est la valeur de tableau qui contient la quantité pour chaque ligne qu'un utilisateur crée.
OU ...
"UPDATE invoices INNER JOIN lineitems
ON invoices.id=lineitems.invoiceid
SET invoices.totalquantity = SUM(lineitems.quantity)
WHERE invoices.id=lineitems.invoiceid
;"
S'il vous plaît aider comme je l'ai essayé plusieurs méthodes différentes ...
Thank you !!
pouvez-vous me dire ce que le "i", "li" et "t" représentent? Je devine qu'ils sont les noms des tables dérivées? Est-ce que cela mettra à jour la colonne dans les factures dont j'ai besoin? – rdimouro
J'ai mis à jour la réponse pour expliquer ces abréviations. L'une de ces requêtes doit mettre à jour la colonne correcte dans la table des factures. –
J'ai donc édité ma question pour refléter le code que j'ai ajouté sur la base de votre suggestion, mais je ne suis pas entièrement sûr de l'implémenter pour que ma table de factures soit mise à jour ... – rdimouro