11. august 2004 - 12:05Der er
27 kommentarer og 4 løsninger
Søg i flere rækker i MySQL
Hej alle.
Jeg er ved at lave lidt "sjov" søgning og skal søge i to tekstfelter og to intervaller. Dvs. at man skal kunne skrive to ord i to forskellige felter samt i fire andre felter kunne skrive 2x2 tal. Herefter skal man kunne søge og nu skal der kun komme de forekomster frem som indeholder de to ord, og ligger mellem de to intervaller. Håber nogle vil være behjælpelige.
har en tabel med felterne tekst1 og tekst2 begge TEXT og tal1 og tal2 begge INT. Er igang med at prøve at lave noget fidilihøj med faste værdier men der kommer kun en blank side
search2-2.php: <html> <body> <?php $db = mysql_connect("mysql5.wannafind.dk","matras_sol","xenhp58s")or die("Der var en MySQL fejl: " . mysql_error()); mysql_select_db("matras_solutions_dk_db",$db)or die("Der var en MySQL fejl: " . mysql_error()); $foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE %$tal11%<=tal1<=%$tal12% AND %$tal21%<=tal2<=%$tal22%"); while($data = mysql_fetch_array($foresp)){
Håber at følgende SQL-statemenet kan hjælpe dig på vej.
SELECT tekst1,tekst2,tal1,tal2 from TABEL where søgekriterie1 >= tal1 AND søgekriterie2 <= tal1 AND søgekriterier3 >= tal2 AND søgekriterie4 <= tal2 AND MATCH(søgekriterie5) AGAINST tekst1 AND MATCH(søgekriterie6) AGAINST tekst2;
Søgekriterie1 - søgekriterie4 er dine talfelter & Søgekriterie5 - søgekriterie6 er dine tekstfelter !!!
ok... nu melder den fejl i dette: $foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE søgekriterie1 >= tal1 AND søgekriterie2 <= tal1 AND søgekriterie3 >= tal2 AND søgekriterie4 <= tal2 AND MATCH(søgekriterie5) AGAINST tekst1 AND MATCH(søgekriterie6) AGAINST tekst2"); while($data = mysql_fetch_array($foresp)){
$foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE %$tal11% <= tal1 AND %$tal12% >= tal1 AND %$tal13% <= tal2 AND %$tal14% >= tal2 AND MATCH(tekst1) AGAINST ('%$tekst11%') AND MATCH(tekst2) AGAINST ('%$tekst22%'); while($data = mysql_fetch_array($foresp)){
HUSK AT INTRODUCERE TO FELTER TIL TEKSTFELTERNE I DIN FORM
search2-2.php: <html> <body> <?php $db = mysql_connect("mysql5.wannafind.dk","matras_sol","xenhp58s")or die("Der var en MySQL fejl: " . mysql_error()); mysql_select_db("matras_solutions_dk_db",$db)or die("Der var en MySQL fejl: " . mysql_error()); $foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE %$tal11% <= tal1 AND %$tal12% >= tal1 AND %$tal13% <= tal2 AND %$tal14% >= tal2 AND MATCH(tekst1) AGAINST ('%$tekst11%') AND MATCH(tekst2) AGAINST ('%$tekst22%'); while($data = mysql_fetch_array($foresp)){ echo "$data[0] $data[1]";
okay... @detox: din (efter rettelse) melder denne fejl: (der er ikke indtastet tekst) You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ') AGAINST tekst1 AND MATCH() AGAINST tekst2' at line 1
Ok, jeg vil nu ikke anbefale fulltext søgning i dette tilfælde. Men hvis du vil bruge det, så læs afsnittet om fulltext grundigt. Da du så skal lave fulltext index på dine felter og du skal osse være særlig opmærksom på brugen af stopwords.
Det med tomme felter i din form forstår jeg heller ikke. Du skriver jo: '... og nu skal der kun komme de forekomster frem som indeholder de to ord, og ligger mellem de to intervaller'
hehe... detox, du har citeret mig korrekt :) men det er vist en tanketorsk... Det er kun hvis der er ord indtastet at forekomsterne skal indeholder de to ord!
$keys = array('tekst1','tekst2','fra1','til1','fra2','til2'); foreach ($keys as $val) { if ($_POST[$val] == '') die('Du har ikke udfyldt alle felter'); }
så skulle den virke efter hensigten (hvis altså du ikke retter andet i den) ;O)
@jasman: det seneste du skrev giver denne fejl: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/www.matras-solutions.dk/www/search2-2.php on line 7
search2-2.php: <html> <body> <?php $db = mysql_connect("host","XXX","XXX")or die("Der var en MySQL fejl: " . mysql_error()); mysql_select_db("db",$db)or die("Der var en MySQL fejl: " . mysql_error()); $foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE %$tal11% <= tal1 AND %$tal12% >= tal1 AND %$tal13% <= tal2 AND %$tal14% >= tal2 AND MATCH(tekst1) AGAINST ('%$tekst11%') AND MATCH(tekst2) AGAINST ('%$tekst22%')"); while($data = mysql_fetch_array($foresp)){
search2-2.php: <html> <body> <?php $db = mysql_connect("host","XXX","XXX")or die("Der var en MySQL fejl: " . mysql_error()); mysql_select_db("db",$db)or die("Der var en MySQL fejl: " . mysql_error()); $foresp = mysql_query("SELECT tekst1, tekst2, tal1, tal2 FROM test WHERE $_POST[tal11] <= tal1 <= $_POST[tal12] AND $_POST[tal21] <= tal2 <= $_POST[tal22] AND MATCH(tekst1) AGAINST ('$_POST[tekst11]') AND MATCH(tekst2) AGAINST ('$_POST[tekst22]')"); while($data = mysql_fetch_array($foresp)){
detox! Nu er den jo ved at fungere! Det er jo helt genialt... :) Man hvis jeg nu kun indtaster værdier i "fra1" og "til1" så bliver siden bare blank - kan man gøre så man ikke skal indtaste i alle felter?
Sådan... Nu duer skidtet! Sad lige og rodede med lidt if og else, og til sidst gik kabalen op. Deler pointene ud - brugte noget af detox' svar, men jasman hjalp godt til undervejs!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.