PHP MySQL Search Problem

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

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

Απάντηση
kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP MySQL Search Problem

Δημοσίευση από kapoios001 » 03 Ιούλ 2011 01:06

Γεια σας,

Έχω αυτό το query:

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

SELECT DISTINCT products.product_ID,
products.product_code, products_details.title, products_details.description
FROM products
JOIN products_details
WHERE products.product_ID = products_details.product_ID
AND products.product_code LIKE '%A01%'
OR products_details.title LIKE '%A01%'
OR products_details.description LIKE '%A01%'
το keyword είναι A01 και υπάρχει μόνο μία εγγραφή στον πίνακα products_details στο πεδίο title αλλά η mySQL μου επιστρέφει αυτό:

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

product_ID 	product_code 	title 	description
1 	  	 	  	 	  	A01 	τεστ περιγραφής
2 	  	 	  	 	  	A01 	τεστ περιγραφής
3 	  	 	  	 	  	A01 	τεστ περιγραφής
4 	  	 	  	 	  	A01 	τεστ περιγραφής
5  	  		 001 	  	 A01 	τεστ περιγραφής
6 	  	 	  	 	  	A01 	τεστ περιγραφής
7 	  	 	  	 	  	A01 	τεστ περιγραφής
8 	  	 	  	 	  	A01 	τεστ περιγραφής
9 	 	  	 002 	  	 A01 	τεστ περιγραφής
δηλαδή μου επιστρέφει 9 εγγραφές και μου εμφανίζει ίδια values στα πεδία title και description. Τι κάνω λάθος στο query και μου το εμφανίζει έτσι;

Υποψιάζομαι ότι είναι η χρήση του AND / OR έτσι όπως τα έχω βάλει να ψάχνει σε πολλά πεδία βρίσκει μια εγγραφή και μετά την επαναλαμβάνει σε όλο τον πίνακα. Το θέμα είναι ότι διάβασα για το LIKE operator και δείχνουν ότι μπορείς να κάνεις αναζήτηση σε multiple fields αλλά σε μένα δεν δουλεύει.

Ευχαριστώ εκ των προταίρων,
ggirtsou

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

PHP MySQL Search Problem

Δημοσίευση από Christianago » 03 Ιούλ 2011 13:22

Εγω υποψιαζομαι οτι εκανες καρτεσιανο γινομενο ενω επρεπε να κανεις αριστερη ενωση.
Βγαλε πρωτα το DISTINCT. Δεδομενου οτι χρησιμοποιειες innoDB τσεκαρε τι ξενα κλειδια εχεις τους πινακες σου που σχετιζονται με το Π.Κ. products.product_code
Μια λυση ειναι για καθε ξενο κλειδι που βρισκεις θα κανεις στη συνθηκη where

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

products.product_code = otherTable.columnForeignKey
products.product_code = anotherTable.columnForeignKey...
Εννοειται στο FROM θα επιλεξεις ολους αυτους τους πινακες.

kapoios001
Δημοσιεύσεις: 403
Εγγραφή: 17 Φεβ 2011 12:26

PHP MySQL Search Problem

Δημοσίευση από kapoios001 » 03 Ιούλ 2011 13:26

Με πρόλαβες. Μόλις θα έκανα post με αυτό το query που τελικά μου δουλεύει:

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

				$sql7 = "SELECT * FROM products 
				JOIN products_details 
				WHERE products.product_ID = products_details.product_ID
				AND (product_code LIKE '%".mysql_real_escape_string((string) $query)."%'
				OR title LIKE '%".mysql_real_escape_string((string) $query)."%'
				OR description LIKE '%".mysql_real_escape_string((string) $query)."%')";
Ήταν πιο απλό απ' ότι φανταζόμουν. Έπρεπε να βάλω παρενθέσεις και εκεί μέσα να παίζουν τα OR.

Απάντηση

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

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

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