Evagg87 Δημοσ. 11 Φεβρουαρίου 2015 Δημοσ. 11 Φεβρουαρίου 2015 Θέλω μια αναζήτηση που θα ψάχνει σε μια βάση ονόματα αλλά τα ονόματα υπάρχει περίπτωση να έχουν και αγγλικούς χαρακτήρες μπερδεμένους με τους ελληνικούς (π.χ. ΓΙΑΝΝΗΣ να είναι το άλφα αγγλικό και το 2 Ν) τα ονόματα είναι όλα σε κεφαλαία
lion2486 Δημοσ. 11 Φεβρουαρίου 2015 Δημοσ. 11 Φεβρουαρίου 2015 Νομίζω η καλύτερη λύση είναι να χρησιμοποιήσεις την LIKE της MySQL και να βάλεις πολλά OR με αναγραμματισμούς σε διάφορους συνδιασμούς.
Aztec Δημοσ. 11 Φεβρουαρίου 2015 Δημοσ. 11 Φεβρουαρίου 2015 Θα καθαρίζεις το input σου πριν κάνεις search στην βάση . Στην βάση θα πηγαίνεις με ισότητα.
defacer Δημοσ. 11 Φεβρουαρίου 2015 Δημοσ. 11 Φεβρουαρίου 2015 Νομίζω η καλύτερη λύση είναι να χρησιμοποιήσεις την LIKE της MySQL και να βάλεις πολλά OR με αναγραμματισμούς σε διάφορους συνδιασμούς. Με τίποτα. Γενικά το πρόβλημα είναι αρκετά απλό που φαίνεται πως αν κάνεις normalization όπως λέει ο Aztec θα γίνει η δουλειά. Πάντως δύο προειδοποιήσεις: Έχεις μπλέξει με πρόβλημα που στη γενική του περίπτωση δύσκολα λύνεται ικανοποιητικά. Κάθε φορά που λέει κάποιος "φαίνεται απλό και θα δουλέψει" προβλέπεται στο μέλλον γέλιο (ή κλάμα).
Evagg87 Δημοσ. 12 Φεβρουαρίου 2015 Μέλος Δημοσ. 12 Φεβρουαρίου 2015 Θα καθαρίζεις το input σου πριν κάνεις search στην βάση . Στην βάση θα πηγαίνεις με ισότητα. Δηλαδή φίλε μου τι εννοείς??
Aztec Δημοσ. 12 Φεβρουαρίου 2015 Δημοσ. 12 Φεβρουαρίου 2015 (επεξεργασμένο) Λοιπον θεωρώ ότι οι απλές και 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','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ'); Επεξ/σία 12 Φεβρουαρίου 2015 από Aztec
Evagg87 Δημοσ. 13 Φεβρουαρίου 2015 Μέλος Δημοσ. 13 Φεβρουαρίου 2015 Λοιπον θεωρώ ότι οι απλές και 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','ΑΒΕΖΗΙΚΜΝΟΡΤΥΧ'); Φίλε μου σε ευχαριστώ πάρα πολύ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα