Προς το περιεχόμενο

php search


Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω μια αναζήτηση που θα ψάχνει σε μια βάση ονόματα αλλά τα ονόματα υπάρχει περίπτωση να έχουν και αγγλικούς χαρακτήρες μπερδεμένους με τους ελληνικούς (π.χ. ΓΙΑΝΝΗΣ να είναι το άλφα αγγλικό και το 2 Ν) τα ονόματα είναι όλα σε κεφαλαία 

Δημοσ.

Νομίζω η καλύτερη λύση είναι να χρησιμοποιήσεις την LIKE της MySQL και να βάλεις πολλά OR με αναγραμματισμούς σε διάφορους συνδιασμούς.

Δημοσ.

Νομίζω η καλύτερη λύση είναι να χρησιμοποιήσεις την LIKE της MySQL και να βάλεις πολλά OR με αναγραμματισμούς σε διάφορους συνδιασμούς.

 

Με τίποτα.

 

Γενικά το πρόβλημα είναι αρκετά απλό που φαίνεται πως αν κάνεις normalization όπως λέει ο Aztec θα γίνει η δουλειά.

 

Πάντως δύο προειδοποιήσεις:

  1. Έχεις μπλέξει με πρόβλημα που στη γενική του περίπτωση δύσκολα λύνεται ικανοποιητικά.
  2. Κάθε φορά που λέει κάποιος "φαίνεται απλό και θα δουλέψει" προβλέπεται στο μέλλον γέλιο (ή κλάμα).
Δημοσ.

Θα καθαρίζεις το input σου πριν κάνεις search στην βάση . Στην βάση θα πηγαίνεις με ισότητα. 

Δηλαδή φίλε μου τι εννοείς?? 

Δημοσ. (επεξεργασμένο)

Λοιπον θεωρώ ότι οι απλές και straight forward λύσεις είναι οι ακόλουθες

 

1. Υλοποιείς ένα πρόγραμμα , για ευκολία σε γλώσσα που υποστηρίζει το RDBMS , το οποίο θα καθαρίσει τα data και θα φέρεις τα ονοματα όλα στην ελληνική γλώσσα. Θα το τρέξεις μία φορά στην βάση. Στην συνέχεια προσαρμόζεις το προγραμμά σου για την εισαγωγή και την αναζήτηση. Δηλαδή να ψάχνει μόνο με ελληνικούς χαρακτήρες. Ο χρήστης θα βάζει και αγγλικούς αλλά on the fly θα γυρνάς τους χαρακτήρες όλους σε ελληνικούς . Αν και δεν θεωρώ λάθος αν σου βάλει αγγλικούς να μην βρει αυτο που ψάχνει. Φυσικά παίζει η ρόλο η χρήση της βάσης απο το app.

 

2. Αφήνεις τα δεδομένα όπως είναι και υλοποιείς μια function που κανει transformation όλων των χαρακτήρων στην ελληνική. Στην συνέχεια καθαρίζεις το search string και στο query χρησιμοποιείς την νέα function. Σημαντικό σε αυτή την περίπτωση είναι το RDBMS που χρησιμοποιείς να υποστηρίζει function based index.  Αν τα ονόματα είναι λίγα nο problem.

 

3. Φτιανεις το query με πολλαπλά nested functions eg replace στο στυλ αλλα για όλους τους αγγλικούς χαρακτηρες που είναι ίδιοι με τους ελληνικούς

 select *
 from table_name 
 where replace(replace (name,'N','Ν'),'A','Α')=CLEANED_SEARCH_INPUT

και φυσικά ότι άλλο κουλό μπορείς να φανταστείς που φυσικά περιπλέκει το query .  Φυσικά ανάλογα το RDBMS μπορείς να βρεις καλύτερες function (eg Oracle's translate ) που να είναι πιο clean στο μάτι και χωρίς να χρειάζεσαι nesting.Καλύτερα όμως να φτιάξεις μια δικιά σου.

 

Σε Οracle , DB2, Postgresql πχ χωρίς να πειράξεις τίποτα στο προγραμμά σου το query γίνεται ενδεικτικά

 select *
 from table_name
 where translate(name,'ABEZHIKMNOPTYX','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ')=
                         translate(input,'ABEZHIKMNOPTYX','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ');
Επεξ/σία από Aztec
Δημοσ.

 

Λοιπον θεωρώ ότι οι απλές και straight forward λύσεις είναι οι ακόλουθες

 

1. Υλοποιείς ένα πρόγραμμα , για ευκολία σε γλώσσα που υποστηρίζει το RDBMS , το οποίο θα καθαρίσει τα data και θα φέρεις τα ονοματα όλα στην ελληνική γλώσσα. Θα το τρέξεις μία φορά στην βάση. Στην συνέχεια προσαρμόζεις το προγραμμά σου για την εισαγωγή και την αναζήτηση. Δηλαδή να ψάχνει μόνο με ελληνικούς χαρακτήρες. Ο χρήστης θα βάζει και αγγλικούς αλλά on the fly θα γυρνάς τους χαρακτήρες όλους σε ελληνικούς . Αν και δεν θεωρώ λάθος αν σου βάλει αγγλικούς να μην βρει αυτο που ψάχνει. Φυσικά παίζει η ρόλο η χρήση της βάσης απο το app.

 

2. Αφήνεις τα δεδομένα όπως είναι και υλοποιείς μια function που κανει transformation όλων των χαρακτήρων στην ελληνική. Στην συνέχεια καθαρίζεις το search string και στο query χρησιμοποιείς την νέα function. Σημαντικό σε αυτή την περίπτωση είναι το RDBMS που χρησιμοποιείς να υποστηρίζει function based index.  Αν τα ονόματα είναι λίγα nο problem.

 

3. Φτιανεις το query με πολλαπλά nested functions eg replace στο στυλ αλλα για όλους τους αγγλικούς χαρακτηρες που είναι ίδιοι με τους ελληνικούς

 select *
 from table_name 
 where replace(replace (name,'N','Ν'),'A','Α')=CLEANED_SEARCH_INPUT

και φυσικά ότι άλλο κουλό μπορείς να φανταστείς που φυσικά περιπλέκει το query .  Φυσικά ανάλογα το RDBMS μπορείς να βρεις καλύτερες function (eg Oracle's translate ) που να είναι πιο clean στο μάτι και χωρίς να χρειάζεσαι nesting.Καλύτερα όμως να φτιάξεις μια δικιά σου.

 

Σε Οracle , DB2, Postgresql πχ χωρίς να πειράξεις τίποτα στο προγραμμά σου το query γίνεται ενδεικτικά

 select *
 from table_name
 where translate(name,'ABEZHIKMNOPTYX','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ')=
                         translate(input,'ABEZHIKMNOPTYX','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ');

Φίλε μου σε ευχαριστώ πάρα πολύ 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...