Σύνθετη αναζήτηση

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

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

Απάντηση
Άβαταρ μέλους
Kainourios
Ruby Moderator
Δημοσιεύσεις: 504
Εγγραφή: 18 Μάιος 2005 16:20
Τοποθεσία: Κορυδαλλός
Επικοινωνία:

Σύνθετη αναζήτηση

Δημοσίευση από Kainourios » 10 Ιούλ 2007 15:14

Θέλω να φτιάξω μια σύνθετη αναζήτηση, δηλαδή να δίνεις μέσω μιας φόρμας κάποιες ή και όλες τις επιλογές και αυτή να εκτελεί ένα query με τις επιλογές που έθεσες (ή μάλλον που θέτει ο χρήστης). Υπάρχουν οι εξής επιλογές για να κάνεις πιο συγκεκριμένα τα στοιχεία μέσα από τη φόρμα: το όνομα του προσώπου προς αναζήτηση, το επώνυμο, και άλλες 3 ιδιότητες. Ομως μπορεί κάποιος να μη θέλει να τις συμπεριλάβει όλες.

Ενας τρόπος που σκέφτομαι αλλά μου φαίνεται λίγο αδύνατο γιατί θα πρέπει να γράψω πολύ κώδικα, είναι να κάνω πολλά if και να ελέγξω όλους τους δυνατούς συνδυασμούς που βάζει ο χρήστης (δηλαδή αν βάζει το όνομα και το επώνυμο ή αν βάζει το όνομα το επώνυμο και μια ιδιότητα ή αν βάζει μόνο τις 2 ιδιότητες κτλ.) και σε κάθε διαφορετική κατάσταση να εκτελεί και διαφορετικό query.

Θα πρέπει όμως να φτιάξω if με όλες τις δυνατές περιπτώσεις που μπορεί ο χρήστης να θέσει προς αναζήτηση και κάθε φορά να γράφω διαφορετικό query... μήπως το προσεγγίζω λάθος ή είναι ο μόνος τρόπος; Ευχαριστώ.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Σύνθετη αναζήτηση

Δημοσίευση από skeftomilos » 10 Ιούλ 2007 15:25

Ένα query αρκεί:

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

SELECT * FROM Members
WHERE (name LIKE @Name OR @Name IS NULL)
  OR (surname LIKE @Surname OR @Surname IS NULL)
  OR (email LIKE @Email OR @Email IS NULL)
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Kainourios
Ruby Moderator
Δημοσιεύσεις: 504
Εγγραφή: 18 Μάιος 2005 16:20
Τοποθεσία: Κορυδαλλός
Επικοινωνία:

Σύνθετη αναζήτηση

Δημοσίευση από Kainourios » 10 Ιούλ 2007 15:44

Χμμ σε ευχαριστώ, θα το κοιτάξω! :) (το @name σε ποια γλώσσα είναι όρισμα μεταβλητής; Επίσης εγώ σε περίπτωση που δεν έχει οριστεί η μεταβλητή θέλω να μου τα εμφανίζει όλα, στο παράδειγμα όπως το διαβάζω μάλλον πάει και ψάχνει που είναι NULL).

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Σύνθετη αναζήτηση

Δημοσίευση από skeftomilos » 10 Ιούλ 2007 17:50

Το @Name είναι παράμετρος του query που έρχεται από κάποιο πεδίο της σύνθετης αναζήτησης, και παίρνει τιμή NULL όταν το πεδίο δε συμπληρωθεί. Δε γνωρίζω πως περνιούνται παράμετροι στον MySQL με PHP, αν δεν υποστηρίζονται τότε θα πρέπει να γίνει string concatenation.

Αν δε συμπληρωθεί κανένα πεδίο τότε θα εκτελεστεί το παρακάτω query:

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

SELECT * FROM Members
WHERE (name LIKE NULL OR NULL IS NULL)
  OR (surname LIKE NULL OR NULL IS NULL)
  OR (email LIKE NULL OR NULL IS NULL)
...του οποίου η συνθήκη WHERE είναι πάντα αληθής.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

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

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

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