Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

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

Απάντηση
jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από jmaz » 23 Ιούλ 2012 19:54

Έχω ενα πίνακα με κάποια στοιχεία π.χ βιβλία

table books
book_id
book_name
book_price
book_cat

Εναν πίνακα με τις κατηγορίες

table categories
cat_id
cat_name

Και έναν πίνακα ο οποίος περιέχει τα βιβλία που βρίσκονται σε προσφορά

table offers
book_id

έχω μία σελίδα με προσφορές και θέλω να εμφανίζω όλα τα βιβλία που είναι σε προσφορά σε μία λίστα

$result = mysql_query("SELECT * FROM offers");

while($row = mysql_fetch_array($result))
{
$offer = $row['book_id'];
echo $offer;
}

Ετσι εμφανίζει όλα τα book_id που είναι μέσα στον πίνακα offers.

Μετα πρέπει να φτιάξω ένα function το οποίο θα παίρνει καθε id και θα κάνει ξεχωριστο query για κάθε book για να βρει τα στοιχεία απο τον πίνακα books

Αν έχω 100 βιβλία και θέλω να δείχνει 30 ανα σελίδα δεν είναι πολλα 30+ query για κάθε σελίδα;

Και άν θέλω να μάθω και το όνομα τις κατηγορίας για κάθε βιβλίο?

Άλλα 30 query...

Μήπως υπάρχει άλλος τρόπος;

Άβαταρ μέλους
philos
Δημοσιεύσεις: 261
Εγγραφή: 30 Αύγ 2007 23:32

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από philos » 23 Ιούλ 2012 21:01

Μπορείς να τα κάνεις όλα με ένα μόλις query ανά σελίδα, χρησιμοποιώντας ένωση πινάκων.
Παράδειγμα:

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

SELECT offers.*, books.*
FROM offers
LEFT JOIN books USING (book_id)
LIMIT 0,30
Αν θέλεις και το όνομα της κατηγορίας:

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

SELECT offers.*, books.*, categories.cat_name
FROM offers
LEFT JOIN books USING (book_id)
LEFT JOIN categories ON (categories.cat_id = books.book_cat)
LIMIT 0,30
Έτσι, ο row θα περιέχει όλα τα στοιχεία που θες:
$row['book_id'];
$row['book_name'];
$row['book_price'];
$row['book_cat'];
$row['cat_name'];

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από jmaz » 24 Ιούλ 2012 00:04

Α ωραια, σε ευχαριστώ πολυ philos!

Κατι άλλο, τα ξένα κλειδιά σε τι χρησιμεύουν?

π.χ. αν δεν χρησιμοποιήσω ξένα κλειδιά δεν θα μπορώ να κάνω join?

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από jmaz » 25 Ιούλ 2012 23:01

Εχω αυτούς τους πίνακες,
πως μπορω να δω όλα τα προϊόντα που υπάρχουν στην κατηρογια cat (και στις υποκατηγορίες της)?

Εικόνα

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από Christianago » 27 Ιούλ 2012 15:51

Για να καταλαβω θες να εμφανιζεις ολα τα προιοντα που ανηκουν στην κατηγορια cat
της στηλης cat_name στον πινακα categories?

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από jmaz » 27 Ιούλ 2012 19:21

Όσες κατηγορίες έχουν cat_root = 1 ειναι οι υποκατηγορίες τις κατηγορίας με cat_id = 1.

Δηλαδή θέλω να εμφανίσω όλα τα προϊόντα που εχουν product.cat_id = 1 και ολες τις κατηγορίες που έχουν categories.cat_root = 1

jmaz
Δημοσιεύσεις: 20
Εγγραφή: 18 Ιουν 2011 15:51

Ερώτηση σχετική με πολλαπλά query και πολλαπλούς πίνακες

Δημοσίευση από jmaz » 27 Ιούλ 2012 20:55

Νομίζω οτι το βρήκα!

Εψαξα λίγο το nested select και το συνδύασα με left join για να βρώ και το όνομα της κατηγορίας απο τον άλλο πίνακα!

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


SELECT *
FROM products
LEFT JOIN categories USING (cat_id)
WHERE cat_id='1' OR cat_id in(SELECT cat_id FROM categories WHERE cat_root='1')


Απάντηση

Επιστροφή στο “MySQL”

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

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