Ένωση άσχετων μεταξύ τους πινάκων.

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

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

Απάντηση
kalpatron
Δημοσιεύσεις: 44
Εγγραφή: 03 Απρ 2006 20:24

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από kalpatron » 24 Αύγ 2006 20:10

Γεια χαρά σε όλους. Θα ήθελα να περιγράψω στην αρχή τα tables που έχω.

Table kithares
Id
Typos
Ksylo
Xordes
Marka
Eggyhsh
Add_date (ημέρα που προστέθηκε στην βάση δεδομένων)

Table piana
Id
Typos
Octaves
Marka
Eggyhsh
Add_date

Οι δύο πίνακες δεν συνδέονται με τίποτα μεταξύ τους και έχουν και διαφορετικό αριθμό πεδίων. Εγώ θέλω στην κεντρική σελίδα μου να εμφανίζω όλα τα προϊόντα μου – δηλαδή κιθάρες και πιάνα – στοιχισμένα με την ημερομηνία (το πιο πρόσφατο πρώτο). Επιπλέον, θέλω για κάθε προϊόν που εμφανίζεται στην κεντρική σελίδα να εμφανίζονται από κάτω και τα χαρακτηριστικά του. Πως ακριβώς πρέπει να φτιάξω το ερώτημα Select; Μήπως θέλει καμιά… πατέντα; Ευχαριστώ!

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6228
Εγγραφή: 30 Νοέμ 2004 03:09

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από fafos » 24 Αύγ 2006 20:34

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

<?
mysql_connect&#40;'localhost'  'user'  'pass'&#41;;
mysql_select_db&#40;"onomavashs"&#41;;
$q1 = "select  * from kithares   order by Add_date DESC";
$r1 = mysql_query&#40;$q1&#41; or die&#40;mysql_error&#40;&#41;&#41;;

if&#40;mysql_num_rows&#40;$r1&#41; > '0'&#41;
&#123;
	while&#40;$a1 = mysql_fetch_array&#40;$r1&#41;&#41;
	&#123;

$a1&#91;Add_date&#93; = date&#40;"j.n.Y", $a1&#91;Add_date&#93;&#41;;
		$showkithares .= "<A href=\"kithares.php?id=$a1&#91;id&#93;\"><b>$a1&#91;Typos &#93;</b><a/><br>
Ξύλο&#58; $a1&#91;Ksylo&#93; <br>
Χορδές&#58; $a1&#91;Xordes&#93;<br>
Μάρκα&#58; $a1&#91;Marka&#93;<br>
Εγγύηση&#58; $a1&#91;Eggyhsh&#93;<br>
Ημερ. Καταχώρησης&#58; $a1&#91;Add_date&#93;<br>
";
	&#125;
&#125;


$Showkithares .=$showkithares;
<?php echo $Showkithares?>
To Add_date prepei na "geniete" mono tou ($Add_date = time(); ) otan kaneis thn kataxorhsh sthn vash sou kai meta to metafrazeis se kanonikh hmeromhnia ( $a1[Add_date] = date("j.n.Y", $a1[Add_date]); ). To kithares.php?id=$a1[id] to exo valei se periptosh pou thes na dineis kapoia poio analytika stoixeia gia kathe proion..

Me ton idio tropo kaneis kai ta piana (allazontas vevea ta stoixeia kai tis metavlhtes)
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

kalpatron
Δημοσιεύσεις: 44
Εγγραφή: 03 Απρ 2006 20:24

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από kalpatron » 24 Αύγ 2006 20:38

Μάλλον δεν έγινα σαφής! Θέλω ας πούμε τα 10 πιο πρόσφατα προϊόντα να εμφανίζονται. Αν ένα πιάνο είναι πιο πρόσφατο από μια κιθάρα θέλω να εμφανίζεται στην ανάλογη θέση. Ο κώδικας που μου δίνεις εμφανίζει απλά τις 10 πιο πρόσφατες κιθάρες, χωρίς να λαμβάνει υπόψη ενδιάμεσα τα πιάνα

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από shadow » 24 Αύγ 2006 20:57

Your answer is union.
Βέβαια πρεπει να κανεις καποιες εκπτώσεις(πρεπει να επιλέγεις τον ιδιο αριθμο πεδίων και απο τους 2 πίνακες) στα αποτελέσματα που θα σου επιστρέψει το ερώτημα από τη βάση

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

&#40;select Id , Typos , Add_date as dateOrder , A as idTable from kithares&#41;
union
&#40;select Id , Typos, Add_date  , B from piana&#41;
order by dateOrder desc
Τωρα ως προς το 2ο ερωτημα , μπορεις οταν θα κανεις fetch τα αποτελεσματα , για καθε record με βαση το 3ο πεδιακι που εχω βαλει στο ερώτημα (Α ή Β) να εκτελεις ενα πλήρες ερώτημα για το συγκεκριμένο προιον στον αντιστοιχο πινακα

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

$sql = " &#40;select Id , Typos , Add_date as dateOrder , A from kithares&#41;".
             " union ".
             "&#40;select Id , Typos, Add_date as dateOrder , B from piana&#41;".
             "order by dateOrder desc;";
$result = mysql_db_query&#40;$dbname , $sql , $connection&#41;;
while &#40;$row = mysql_fetch_row&#40;$result&#41;&#41;&#123;
	// here show header
	echo $row&#91;0&#93;;
	echo $row&#91;1&#93;;
	if&#40;$row&#91;3&#93; == 'A'&#41;
	     //second query at table kithares for product with id = $row&#91;0&#93;
	elseif&#40;$row&#91;3&#93;=='B'&#41;
	    //second query at table piana  for product with id = $row&#91;0&#93;

Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

kalpatron
Δημοσιεύσεις: 44
Εγγραφή: 03 Απρ 2006 20:24

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από kalpatron » 25 Αύγ 2006 00:55

shadow το κατάλαβα και το έκανα να δουλέψει κανονικά. Αν υπάρχει βέβαια και κάποιος άλλος τρόπος που ξέρει κάποιος, θα ήθελα να το μάθω. Ευχαριστώ πολύ!

Άβαταρ μέλους
alexandr0s
Δημοσιεύσεις: 1064
Εγγραφή: 25 Απρ 2006 17:16
Τοποθεσία: localhost
Επικοινωνία:

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από alexandr0s » 27 Αύγ 2006 14:19

Το union είναι η πιο σωστή λύση. Να σου πω αν βρίσκεσαι στην αρχή της δημιουργίας του site σου θα σου πρότεινα να αλλάξεις λίγο τη λογική των πινάκων σου έτσι ώστε να μπορείς στο μέλλον να αντιμετωπίσεις τη πιθανή προσθήκη και άλλων μουσικών οργάνων στο site σου. Πχ θα μπορούσες να κάνεις το εξής οι 2 πίνακες που έχεις μπορεί να γίνουν ένας (είδη πχ) και να βάλεις έναν άλλο πίνακα ο οποίος να δηλώνει τι είναι το κάθε είδος. Επειδή στη λογική κάθε μουσικό όργανο έχει διαφορετικές ιδιότητες (πχ ξύλο, χορδές κτλ) μπορείς να ορίσεις dummy 4 ιδιότητες (τυχαίος αριθμός) στο πινακα τον ειδών όπου ανάλογα με το μουσικό όργανο θα έχουν διαφορετική ονομασία (label), μια πιο δύσκολη λύση θα ήταν να κρατάς τις ιδιότητες σε ξεχωριστό πίνακα. Τεσπά υπάρχουν διάφορες δυνατές υλοποιήσεις όρεξη να έχεις...

kalpatron
Δημοσιεύσεις: 44
Εγγραφή: 03 Απρ 2006 20:24

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από kalpatron » 29 Αύγ 2006 23:20

Thanks man! Όταν λες dummy ιδιότητες εννοείς γενικά να βάζω κάποια παραπάνω πεδία σε κάθε πίνακα, έτσι ώστε όλοι αυτοί που θα ενώσω με ένα UNION, να έχουν τον ίδιο αριθμό πεδίων;

Πάντως σε γενικές γραμμές το έχω καταφέρει το UNION και δουλεύει κανονικά! Ευχαριστώ guys!

Άβαταρ μέλους
alexandr0s
Δημοσιεύσεις: 1064
Εγγραφή: 25 Απρ 2006 17:16
Τοποθεσία: localhost
Επικοινωνία:

Ένωση άσχετων μεταξύ τους πινάκων.

Δημοσίευση από alexandr0s » 30 Αύγ 2006 04:29

Όχι ακριβώς. Ίσως η λέξη dummy να μην είναι η καταλληλότερη. Απλά να έχεις 2-4 πεδία ίσως και παραπάνω έτσι ώστε να μπορεις να καταχωρήσεις ιδιότητες-πληροφορίες (πχ εγγύηση κτλ) σχετικά με αυτά. Με τον τρόπο που σου έχω αναφέρει δεν χρειάζεται union γιατί τα δεδομένα έρχονται από τον ίδιο πίνακα.

Απάντηση

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

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

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