Get auto increment id before while executing query

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Get auto increment id before while executing query

Δημοσίευση από Khronos » 27 Αύγ 2010 11:45

Εκτελώντας ένα insert σε table με auto increment id, θέλω να εισάγω αυτό το id μαζί με άλλα δεδομένα σε κάποιο πεδίο του ίδιου πίνακα στην ίδια εγγραφή.

Υπάρχει κάποιος τρόπος να πάρω το auto increment id πρίν εκτελεστεί το query? Δηλαδή να κάνω αυτό που θέλω με ένα query στο insert και όχι insert και μετά update το πεδίο που θέλω.

Ευχαριστώ

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Get auto increment id before while executing query

Δημοσίευση από dva_dev » 27 Αύγ 2010 12:31

Αν υποθέσεις ότι με κάποιο τρόπο μπορείς να διαβάσεις ποιό θα είναι το (πιθανό) "επόμενο id", μέχρι να κάνεις το εσύ insert με αυτό το id, μπορεί κάποιος άλλος να έχει προλάβει να κάνει 50 insert παίρνοντας σου και αυτό που διάβασες και τα 49 επόμενα.

Για ποιά βάση ενδιαφέρεσαι να το κάνεις;

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Get auto increment id before while executing query

Δημοσίευση από Khronos » 27 Αύγ 2010 12:34

Sorry δεν το διευκρίνησα, mysql είναι (αυτό εννοείς?).

Αυτό που λές δεν πρόκειται να συμβεί, είναι για admin panel που θα το δουλεύει ένα άτομο.
[edit]
και σίγουρα δεν πρόκειται να γίνουν εγγραφές απο frontend users.
[/edit]

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Get auto increment id before while executing query

Δημοσίευση από dimsis » 27 Αύγ 2010 13:12

@@identity για sql server
LAST_INSERT_ID() mysql

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Get auto increment id before while executing query

Δημοσίευση από Khronos » 27 Αύγ 2010 13:17

dimsis έγραψε:@@identity για sql server
LAST_INSERT_ID() mysql
Το θέμα είναι οτι θέλω να ξέρω ποιο είναι το auto increment id πρίν γίνει το insert για να γλιτώσω 2ο query. Οχι οτι είναι τόσο σημαντικό αλλά αν υπάρχει τρόπος, γιατί οχι.

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Get auto increment id before while executing query

Δημοσίευση από dimsis » 27 Αύγ 2010 13:22

Sorry τώρα σε έπιασα.
Δες μήπως πιάνει αυτό;

Κώδικας: Επιλογή όλων

$r = mysql_query("SHOW TABLE STATUS LIKE 'table_name' ");
$row = mysql_fetch_array($r);
$Auto_increment = $row['Auto_increment'];
mysql_free_result($r);
διαφορετικά αφού θα το δουλεύει ένας θα μπορούσες να πάρεις και το MAX(id)+1 αλλά πάλι θέλεις και 2ο query για αυτά.
Στο ίδιο (1) το query χλωμό το βλέπω...

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Get auto increment id before while executing query

Δημοσίευση από Khronos » 27 Αύγ 2010 13:28

Δεν μπορώ να το δοκιμάσω αυτή τη στιγμή, το απόγευμα μάλλον.

Το ιδανικό θα ήταν στο ίδιο query, αλλά απ'όσο έχω ψάξει μάλλον δεν γίνεται...

Ευχαριστώ για τις απαντήσεις!

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Get auto increment id before while executing query

Δημοσίευση από dimsis » 27 Αύγ 2010 13:39

Εκτός και αν το βάλεις στο ίδιο query με subselect του στυλ

Κώδικας: Επιλογή όλων

insert into table(id,txt) values ((select(max(id)+1) from table),'muble muble')
αλλά δεν νομίζω πως έχει και μεγάλη διαφορά σε ταχύτητα από το να τρέξεις 2ο q.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Get auto increment id before while executing query

Δημοσίευση από Apostolis_38 » 27 Αύγ 2010 14:46

Κώδικας: Επιλογή όλων

show table status like "πίνακας"
Εχει ένα πεδίο που λέγεται Auto increment

editΓια να μην μπερδευτείς. Το νούμερο που σου βγάζει είναι το επόμενο id

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Get auto increment id before while executing query

Δημοσίευση από dva_dev » 27 Αύγ 2010 15:29

Δεν νομίζω πως μπορείς να πάρεις το επόμενο id και να το χρησιμοποιήσεις μέσα στο ίδιο query. Οσο έχω ψάξει πάντα γίνεται σε 2 τουλάχιστον queries. Οπότε αν το ζητούμενο είναι να το πάρεις σε ένα query μάλλον πρέπει να το ψάξεις σε used defined stored procedure ή σε function.
Αν τελικά καταλήξεις εκεί, πλέον μπορείς να χρησιμοποιήσεις μέσα στην sp όσα queries θέλεις και εσύ να καλέσεις απλώς σε ένα query την stored procedure. Αλλά αν χρησιμοποιήσεις stored procedure, γιατί να το κάνεις με τον λάθος τρόπο - παίρνοντας το πιθανώς επόμενο id - και να μην το κάνεις με τον σωστό τρόπο;
Επίσης το last_insert_id δεν κάνει αυτό που λέει το όνομα της αλλά last_insert__first_id (φέρνει το πρώτο id από το τελευταίο insert που έγινε). Αυτά τα δύο συμπίπτουν μόνο όταν γίνεται insert μία εγγραφή κάθε φορά και σε περίπτωση που έχεις multiple insert, χ3σ3 μέσα, οπότε προσοχή στα διάφορα φρου φρου που βάζει η mysql και δεν φροντίζει να τους δώσει το σωστό όνομα και να τα υποστηρίξει σωστά.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Get auto increment id before while executing query

Δημοσίευση από cherouvim » 27 Αύγ 2010 16:20

Δεν γίνεται.

Γιατί το χρειάζεσαι πάντως; Έχεις ήδη την πληροφορία στο id.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες