PHP-Mysql ερώτημα (σχετικό με auto-incremeting foreign key)

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
shodanjr_gr
Mbyte level
Mbyte level
Posts: 810
Joined: Mon Mar 21, 2005 2:45 am
Academic status: Alumnus/a
Location: Stony Brook, NY

PHP-Mysql ερώτημα (σχετικό με auto-incremeting foreign key)

Post by shodanjr_gr » Mon Mar 26, 2007 4:07 pm

Έστω ότι έχω τους δύο ακόλουθους πίνακες (αντιγράφω τον κώδικα της δημιουργίας τους σε SQL).

Create TABLE table_a(
table_a_id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
table_a_value INT)

CREATE TABLE table_b(
table_b_id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
table_b_value INT,
table_a_id MEDIUMINT NOT NULL,
FOREIGN KEY(table_a_id) REFERENCES table_a(table_a_id))

Πρώτα δημιουργείται ο table_a και στη συνέχεια ο table_b που περιέχει αναφορά στον table_a μέσω του table_a_id. Όμως το table_a_id αυξάνεται αυτόματα με κάθε insert statement και δεν τον ορίζω εγώ οπότε πως μπορώ να το περάσω ως παράμετρο σε insert statement στον table_b;

Νομίζω ότι λύνεται με την χρήση Stored Procedure το παραπάνω αλλά αυτή τη στιγμή η λύση μου διαφεύγει (το ψάχνω πάντως).

Αν μπορεί κάποιος να βοηθήσει θα του ήμουν ευγνώμων :)
"Liberal" isn't a dirty word Blackadder!
User avatar
P3
Venus Project Founder
Venus Project Founder
Posts: 2722
Joined: Mon Mar 22, 2004 4:12 pm
Academic status: Alumnus/a
Gender:
Location: !! El Paso !!

Post by P3 » Mon Mar 26, 2007 4:28 pm

Μια μπακάλικη λύση είναι αφού κάνεις το Insert να κάνεις αμέσως ένα "select a_id from table_a where a_value=H_TIMH_ΠΟΥ_ΜΟΛΙΣ_ΕΚΑΝΕΣ_INSERT" οπότε αμέσως θα σου επιστραφεί το id της γραμμής που μόλις έκανες Insert και θα μπορείς να το χρησιμοποιήσεις στο table_b.
"Το δικό μου το ποίημα δεν έχει ομοιοκαταληξία.", ο υπογράφων
shodanjr_gr
Mbyte level
Mbyte level
Posts: 810
Joined: Mon Mar 21, 2005 2:45 am
Academic status: Alumnus/a
Location: Stony Brook, NY

Post by shodanjr_gr » Mon Mar 26, 2007 5:08 pm

Δυστυχώς κάτι τέτοιο για διάφορους λόγους δεν μου κάνει. Κυρίως διότι το value δεν είναι μοναδικό πεδίο (απλά το έγραψα έτσι για λόγους απλούστευσης) , αλλά αποτελείται από πολλά πεδία, μπορεί πολλές φορές να έχουν μοναδική διαφορά την ημερομηνία/ώρα προσθήκης (μορφής dateTime) η οποία πιθανότατα αλλάζει μεταξύ των insert και select.
"Liberal" isn't a dirty word Blackadder!
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Mon Mar 26, 2007 5:17 pm

Δηλαδή κάνεις ένα insert στον πίνακα a και μετά στον πίνακα b και θες να βάλεις το ίδιο id στο αντίστοιχο πεδίο? Αν ναι, μετά το πρώτο Insert βάλε σε μια μεταβλητή $i=mysql_insert_id(); και θα σου περάσει το id της τελευταίας εγγραφής που έβαλες.
shodanjr_gr
Mbyte level
Mbyte level
Posts: 810
Joined: Mon Mar 21, 2005 2:45 am
Academic status: Alumnus/a
Location: Stony Brook, NY

Post by shodanjr_gr » Mon Mar 26, 2007 6:54 pm

Χίλια Ευχαριστώ Ράνια (και Ρ3, αλλά περισσότερο στη Ράνια :p)!!!!!!


Το έλυσα το πρόβλημα με τον τρόπο που έγραψες!!
"Liberal" isn't a dirty word Blackadder!
User avatar
ράνια
Kilobyte level
Kilobyte level
Posts: 235
Joined: Wed Oct 12, 2005 2:51 pm

Post by ράνια » Mon Mar 26, 2007 11:15 pm

Anytime ;)

http://www.php.net forever, οτι χρειαστείς, εδώ θα το βρεις! :) :)
User avatar
P3
Venus Project Founder
Venus Project Founder
Posts: 2722
Joined: Mon Mar 22, 2004 4:12 pm
Academic status: Alumnus/a
Gender:
Location: !! El Paso !!

Post by P3 » Mon Mar 26, 2007 11:18 pm

Βασικά δεν ξέρω πόσο καλό είναι από σχεδιαστικής άποψης η βάση σου να έχει ένα πίνακα όπου πολλά a_id έχουν ίδιο a_value, αλλά άμα σε βολεύει!
"Το δικό μου το ποίημα δεν έχει ομοιοκαταληξία.", ο υπογράφων
shodanjr_gr
Mbyte level
Mbyte level
Posts: 810
Joined: Mon Mar 21, 2005 2:45 am
Academic status: Alumnus/a
Location: Stony Brook, NY

Post by shodanjr_gr » Mon Mar 26, 2007 11:27 pm

P3 wrote:Βασικά δεν ξέρω πόσο καλό είναι από σχεδιαστικής άποψης η βάση σου να έχει ένα πίνακα όπου πολλά a_id έχουν ίδιο a_value, αλλά άμα σε βολεύει!
Δεν έχουν το ΙΔΙΟ ακριβώς value. Απλά το παρουσίασα έτσι για λόγους απλούστευσης. Thanks πάντως για την βοήθεια ;)
"Liberal" isn't a dirty word Blackadder!
User avatar
P3
Venus Project Founder
Venus Project Founder
Posts: 2722
Joined: Mon Mar 22, 2004 4:12 pm
Academic status: Alumnus/a
Gender:
Location: !! El Paso !!

Post by P3 » Tue Mar 27, 2007 9:05 am

shodanjr_gr wrote:Δεν έχουν το ΙΔΙΟ ακριβώς value. Απλά το παρουσίασα έτσι για λόγους απλούστευσης. Thanks πάντως για την βοήθεια ;)
U R the man! U know! ;)
"Το δικό μου το ποίημα δεν έχει ομοιοκαταληξία.", ο υπογράφων
Post Reply

Return to “Προγραμματισμός”