Βοηθεια σε query με 3 tables

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

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

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

Βοηθεια σε query με 3 tables

Δημοσίευση από dva_dev » 22 Οκτ 2009 01:53

Θυμόμουν ότι κάπου είχε ζητηθεί κάτι αντίστοιχο και τελικά μετά από αρκετή ώρα ψαξίματος βρέθηκε (πολύ περισσότερη από το να φτιαχνόταν από την αρχή).

http://www.freestuff.gr/forums/viewtopic.php?t=43405

Αν και δεν έχει και πολύ νόημα πλέον... μάλλον κάτι θέλει αλλαγή ή βελτίωση στον τρόπο ποτ δουλεύει η αναζήτηση.
Σημ. Το αποτέλεσμα βρέθηκε από το google search. :-?

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Βοηθεια σε query με 3 tables

Δημοσίευση από soteres2002 » 22 Οκτ 2009 08:18

psapikas έγραψε:Με union θα φέρει και εγγραφές που πληρούν μόνο το 1 από τα 2 κριτήρια
dokimaste INTESECT gia na plirountai kai ta 2 kritiria.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοηθεια σε query με 3 tables

Δημοσίευση από korgr » 22 Οκτ 2009 10:38

dva_dev έγραψε:Θυμόμουν ότι κάπου είχε ζητηθεί κάτι αντίστοιχο και τελικά μετά από αρκετή ώρα ψαξίματος βρέθηκε (πολύ περισσότερη από το να φτιαχνόταν από την αρχή).

http://www.freestuff.gr/forums/viewtopic.php?t=43405

Αν και δεν έχει και πολύ νόημα πλέον... μάλλον κάτι θέλει αλλαγή ή βελτίωση στον τρόπο ποτ δουλεύει η αναζήτηση.
Σημ. Το αποτέλεσμα βρέθηκε από το google search. :-?
Πολυ σωστος dva_dev!
Στην ουσια ειναι αυτο που ανακαλυψα τελικα και εγω με την χρηση της group by...having count, απλα την παραμετρο της ποσοτητας των ζητουμενων κριτηριων την βγαζεις (στο παραδειγμα σου) με ενα επιπλεον select. Μπορουμε παντως να γλυτωσουμε αυτο το select, αφου πριν γινει dynamically build το query, η php μπορει να υπολογισει το πληθος των ζητουμενων παραμετρων.

Παραθετω και το παραδειγμα του αλλου topic, ωστε να ειναι συγκεντρωμενες ολες οι λυσεις
dva_dev έγραψε:

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

SELECT TMP.FKEY
FROM
(
	SELECT MYTABLE.FKEY, MYTABLE.CNAME
	FROM MYTABLE
	WHERE MYTABLE.CNAME IN ('ΜΑΥΡΟ', 'ΑΣΠΡΟ')
) TMP
GROUP BY TMP.FKEY
HAVING COUNT(TMP.CNAME) = ( SELECT COUNT(*) FROM COLORS WHERE COLORS.CNAME IN ('ΜΑΥΡΟ', 'ΑΣΠΡΟ') )

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

Βοηθεια σε query με 3 tables

Δημοσίευση από dva_dev » 22 Οκτ 2009 11:53

Νομίζω η βασική διαφορά ευχρηστίας είναι οτι αντί για πολλαπλά OR μπορείς να χρησιμοποιήσεις ένα IN (λίστα τιμών) και ξεμπερδεύεις.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Βοηθεια σε query με 3 tables

Δημοσίευση από korgr » 22 Οκτ 2009 13:18

Και παλι σωστος dva_dev :D

Η τελικη φορμα και πως δημιουργειται το query on the fly:

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

//----------------------------------------------- build query
// Αρχικος ελεγχος αν δωθηκαν extra κριτηρια και αν ναι αποθηκευση στον πινακα $criteria
$resextras = mysql_query("select * from extras where 1");
while($rowextras=mysql_fetch_array($resextras)){
$extra_id = $rowextras[id];
if(${'extra'.$extra_id}){
$criteria[] = $extra_id;
}
}


// start building query
$q="select distinct cars.* from cars join members on (cars.member=members.id and members.active=1) ";
if(count($criteria)){ // αν δώθηκαν κριτηρια extras
$q.="join carExtras on cars.id=carExtras.cars_id and (carExtras.extra_id in (";
$q.=implode(",", $criteria);
$q.=")) ";
}
$q.="where cars.active=1 ";
if(!$showall){ // αν ζητουνται ως κριτηρια και η μαρκα + το μοντελλο
$q.="and cars.subcat='".$subcat."' and cars.marka='".$marka."' ";
}
if($operand == "AND"){ // μονο αν πρεπει να πληρουνται ολα τα κριτηρια extras
$q.="GROUP BY carExtras.car_id HAVING count(carExtras.car_id)=".count($criteria);
}
//------------------------------------------------
Σας ευχαριστω ολους για την βοηθεια και τις υποδειξεις!
problem solved!

Απάντηση

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

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

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