Προς το περιεχόμενο

mySql Duplicates


Προτεινόμενες αναρτήσεις

Δημοσ.

Ας πουμε έχω τον παρακατω πίνακα

post-154729-0-15664000-1425153646_thumb.png

 

στην επόμενη εντολη: 

INSERT INTO product (item_code, value, quantity) VALUES ('$item_name', '$value_name', '$quantity_name')

δεν θέλω να φτιάξει duplicate αλλα να αυξηθει το quantity κατα quantity+quantity φορές. Το ON DUPLICATE KEY UPDATE πλησίασε ελαχιστα σε αυτο που θέλω. Καμια ιδεά;

Δημοσ.

το παραπανω πινακακι ηταν απλα ενδεικτικο.

 

Αυτο προσπαθω να τρεξω αλλα χτυπαει συντακτικο λαθος

<?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);
?>
Δημοσ.

Δοκιμασε 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

Δημοσ.

Ευχαριστω για την βοηθεια παιδια.!!

Το 

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'

Δημοσ.

κάντο με τον βλάχικο τρόπο να κάνεις τη δουλειά σου τουλάχιστον 

$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

Δημοσ. (επεξεργασμένο)

Λογικα τοτε εχεις ορισει τις ποσοτητες (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.

Επεξ/σία από derasto

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...