derasto Δημοσ. 28 Φεβρουαρίου 2015 Δημοσ. 28 Φεβρουαρίου 2015 Ας πουμε έχω τον παρακατω πίνακα στην επόμενη εντολη: INSERT INTO product (item_code, value, quantity) VALUES ('$item_name', '$value_name', '$quantity_name') δεν θέλω να φτιάξει duplicate αλλα να αυξηθει το quantity κατα quantity+quantity φορές. Το ON DUPLICATE KEY UPDATE πλησίασε ελαχιστα σε αυτο που θέλω. Καμια ιδεά;
lion2486 Δημοσ. 28 Φεβρουαρίου 2015 Δημοσ. 28 Φεβρουαρίου 2015 ON DUPLICATE KEY UPDATE SET `quantity` = `quantity` + $quantity_name WHERE `item_code` = '$iten_name'; (Αν κατάλαβα καλά το item_code είναι το κλειδί σου)
derasto Δημοσ. 28 Φεβρουαρίου 2015 Μέλος Δημοσ. 28 Φεβρουαρίου 2015 το παραπανω πινακακι ηταν απλα ενδεικτικο. Αυτο προσπαθω να τρεξω αλλα χτυπαει συντακτικο λαθος <?php $link = mysqli_connect("localhost", "root", "toor", "company"); if($link === false){ die("ERROR: Could not connect. " . mysqli_connect_error()); } $itemname = mysqli_real_escape_string($link, $_POST['itemname']); $quantity = mysqli_real_escape_string($link, $_POST['quantity']); $sql = "INSERT INTO product (product_name, product_quantity) VALUES ('$itemname', '$quantity') ON DUPLICATE KEY UPDATE SET 'product_quantity' = 'product_quantity' + $quantity WHERE 'itemname' = '$itemname'"; if(mysqli_query($link, $sql)){ echo "Records added successfully."; } else{ echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); } mysqli_close($link); ?>
0verc0me Δημοσ. 28 Φεβρουαρίου 2015 Δημοσ. 28 Φεβρουαρίου 2015 Δοκιμασε ON DUPLICATE KEY UPDATE αντι για ON DUPLICATE KEY UPDATE SET και αφαιρεσε το μετ'επειτα WHERE κ μετά. Δηλαδή INSERT INTO product (`product_name`, `product_quantity`) VALUES ('$itemname', '$quantity') ON DUPLICATE KEY UPDATE `product_quantity` = `product_quantity` + $quantity; ασχετο, αλλα αντι για mysqli_real_escape_string κλπ, γιατι δεν ριχνεις μια ματια για prepared statements; http://php.net/manual/en/mysqli.prepare.php
lion2486 Δημοσ. 28 Φεβρουαρίου 2015 Δημοσ. 28 Φεβρουαρίου 2015 δοκίμασε να βγάλεις το where στο on duplicate key
derasto Δημοσ. 1 Μαρτίου 2015 Μέλος Δημοσ. 1 Μαρτίου 2015 Ευχαριστω για την βοηθεια παιδια.!! Το INSERT INTO product (`product_name`, `product_quantity`) VALUES ('$itemname', '$quantity') ON DUPLICATE KEY UPDATE `product_quantity` = `product_quantity` + $quantity; κανει αυτο που θέλω αλλα δημιουργει αργοτερα ενα προβληματακι. Την 1η φορα που θα τρεξω την εντολη την περναει κανονικα. Την 2η φορα προσθετει στον πινακα οτι ειχε + αυτο που εβαλα κομπλε και εδω. Την 3η φορα φτιαχνει νεα εγγραφη με τον αριθμο που εβαλα(βαζω το 5) Την 4η φορα πεταει error γιατι παει να προσθεσει το αποτελεσμα της 3η εγγραφης με το αθροισμα της 1ης+2ης εγγραφης και το βρισκει duplicate. Px id: 62 - Product Name: test1- Product Quantity: 10 id: 64 - Product Name: test1- Product Quantity: 5 Στην 4η δοκιμη βγαζει δαυτο: ERROR: Could not able to execute INSERT INTO product (`product_name`, `product_quantity`) VALUES ('test1', '5') ON DUPLICATE KEY UPDATE `product_quantity` = `product_quantity` + 5;. Duplicate entry '10' for key 'product_quantity'
0verc0me Δημοσ. 1 Μαρτίου 2015 Δημοσ. 1 Μαρτίου 2015 Λογικα τοτε εχεις ορισει τις ποσοτητες (product_quantity) ως PRIMARY KEY?
libereas Δημοσ. 1 Μαρτίου 2015 Δημοσ. 1 Μαρτίου 2015 κάντο με τον βλάχικο τρόπο να κάνεις τη δουλειά σου τουλάχιστον $sql="SELECT * FROM product WHERE product_name=".$itemname.""; $result=mysqli_query($link, $sql); if(!$result)( $sql1="INSERT INTO product (product_name, product_quantity) VALUES (".$itemname.", ".$quantity.")"; $result1=mysqli_query($link, $sql1); ) else { $sql1 = "UPDATE product SET product_quantity = 'product_quantity' + ".$quantity." WHERE itemname = ".$itemname.""; $result1=mysqli_query($link, $sql1); } τρέξε δηλαδή ένα query να δεις αν υπάρχει διπλοεγγραφή και αν ναι κάνε update αν όχι κάνε insert
derasto Δημοσ. 1 Μαρτίου 2015 Μέλος Δημοσ. 1 Μαρτίου 2015 (επεξεργασμένο) Λογικα τοτε εχεις ορισει τις ποσοτητες (product_quantity) ως PRIMARY KEY? Primary key έχω δώσει ενα product_id. κάντο με τον βλάχικο τρόπο να κάνεις τη δουλειά σου τουλάχιστον $sql="SELECT * FROM product WHERE product_name=".$itemname.""; $result=mysqli_query($link, $sql); if(!$result)( $sql1="INSERT INTO product (product_name, product_quantity) VALUES (".$itemname.", ".$quantity.")"; $result1=mysqli_query($link, $sql1); ) else { $sql1 = "UPDATE product SET product_quantity = 'product_quantity' + ".$quantity." WHERE itemname = ".$itemname.""; $result1=mysqli_query($link, $sql1); } τρέξε δηλαδή ένα query να δεις αν υπάρχει διπλοεγγραφή και αν ναι κάνε update αν όχι κάνε insert ευχαριστω για την απαντηση.Το δοκιμαζω λιγο γιατι δεν τρέχει. τον πινακα τον έχω σωστο; CREATE DATABASE company; CREATE TABLE product( product_id int(10) NOT NULL AUTO_INCREMENT, product_name varchar(255) NOT NULL, product_quantity varchar(255) NOT NULL, PRIMARY KEY (product_id) ) ολα οκ δουλεψε με Με primary_key to product_name. Δεν καταλαβα βεβαια γιατι δεν ετρεχε με primary_key to product _id. Επεξ/σία 1 Μαρτίου 2015 από derasto
Uberalles_gr Δημοσ. 2 Μαρτίου 2015 Δημοσ. 2 Μαρτίου 2015 Δεν δούλεψε με το product_id γιατί στο query σου δεν υπήρχε πουθενά το product_id. Θα έπρεπε λογικά να βάλεις και αυτό στο insert
lion2486 Δημοσ. 2 Μαρτίου 2015 Δημοσ. 2 Μαρτίου 2015 Για να δουλέψει θα πρέπει να είναι το Primary_key το item_code (λέω για το on duplicate key).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα