Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3426[/thread]

MySQL Abfrage (Seite 2)



<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten
Tom
 2004-03-29 19:29
#31919 #31919
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
http://www.weber-computerhilfe.de/bilder/sonstige/...

Das sind die Tabellen, wenn ich jetzt den oben geposteten Code neme und möcht z.B. in der Tabelle Veranstalter nach Tom und Test suchen, dann verküpft es mir meine Abfrage gleich so

Code: (dl )
SELECT * FROM event_topic WHERE veranstalter LIKE 'Tom' AND veranstalter LIKE 'Test' ORDER BY time


Wenn ich jetzt aber in der Tabelle Veranstalter und Beschreibung nach mehreren Begriffen suchen will muss die Abfrage ja so aussehen

Code: (dl )
SELECT * FROM event_topic WHERE veranstalter LIKE 'Tom' AND veranstalter LIKE 'Test' beschreibung LIKE 'Tom' AND beschreibung LIKE 'Test' ORDER BY time


Und das sollte auch automatisch gehen, so wie das bei den Suchbegriffen der Fall ist.

Danke

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
renee
 2004-03-29 20:09
#31920 #31920
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also ich seh da jetzt nur eine Tabelle!

Wenn Du bei einer Spalte mehrere Möglichkeiten (Suchbegriffe) suchst, dann musst Du diese mit OR verknüpfen...
[sql]SELECT * FROM event_topic WHERE (veranstalter LIKE 'Tom' OR veranstalter LIKE 'Test') AND (beschreibung LIKE 'Tom' OR beschreibung LIKE 'Test') ORDER BY time[/sql]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2004-03-29 20:15
#31921 #31921
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Automatisiert würde das dann ungefähr so aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @searchs = qw(Tom Test);
my @veranstalter = map{'veranstalter LIKE '.$_}@searchs;
my @beschreibung = map{'beschreibung LIKE '.$_}@searchs;
my $statement = 'SELECT * FROM event_topic WHERE ('.join(' OR ',@veranstalter).') AND ('.join(' OR ',@beschreibung).') ORDER BY time;';
my $sth = $dbh->prepare($statement);
$sth->execute();
while(my @array = $sth->fetchrow_array()){
 print "@array";
}
$sth->finish();
\n\n

<!--EDIT|renee|1080577007-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Tom
 2004-03-31 18:54
#31922 #31922
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke Dir werde das ganze mal testen, hab nur im moment wenig Zeit, melde mich auf jedenfall.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2004-04-01 20:31
#31923 #31923
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also habe das jetzt mal getestet, funktioniert super, hab snoch etwas erweitert, habe aber noch zwei Fragen:

Erstens, wie bekomm eich noch
Quote
WHERE time BETWEEN $time AND $etime


in meine Abfrage???

Habe es so versucht, aber da wird dann nur die Variable verwendet aber nicht der Inhalt

[sql]$sql = 'SELECT * FROM event_topic WHERE time BETWEEN "$time" AND "$etime" AND ('.join( $verkn ,@veranstalter).') OR ('.join( $verkn ,@veranstaltungsort).') OR ('.join( $verkn ,@location).') OR ('.join( $verkn ,@titel).') OR ('.join( $verkn ,@beschreibung).') ORDER BY time;';[/sql]

Die Zweite Frage ist muss ich das wirklich so schreiben oder geht das auch kürzer???

[sql]my @wort = split (/\s +/, $suchen);
my $verkn = " AND "; # Standard -Verknüpfung
$verkn = " AND " if $auswahl eq "alle";
$verkn = " OR " if $auswahl eq "eins";
my @veranstalter = map{'veranstalter LIKE '."'%$_%'"}@wort;
my @veranstaltungsort = map{'veranstaltungsort LIKE '."'%$_%'"}@wort;
my @location = map{'location LIKE '."'%$_%'"}@wort;
my @titel = map{'titel LIKE '."'%$_%'"}@wort;
my @beschreibung = map{'beschreibung LIKE '."'%$_%'"}@wort;
$sql = 'SELECT * FROM event_topic WHERE ('.join( $verkn ,@veranstalter).') OR ('.join( $verkn ,@veranstaltungsort).') OR ('.join( $verkn ,@location).') OR ('.join( $verkn ,@titel).') OR ('.join( $verkn ,@beschreibung).') ORDER BY time;';
[/sql]

Danke für die Hilfe

Tom\n\n

<!--EDIT|Tom|1080837145-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2004-04-04 22:23
#31924 #31924
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kann mir denn keiner mehr helfen???

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Strat
 2004-04-05 00:07
#31925 #31925
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[sql]$sql = 'SELECT * FROM event_topic WHERE time BETWEEN "$time" AND "$etime" AND ('.joIN[/sql]
Wenn du da einfache Anfuehrungszeichen ' verwendest, wird $time nicht durch den Wert von $time ersetzt; dies funktioniert nur bei doppelten Anfuehrungszeichen "
Ich verwende da gerne qq~ .... ~, was " ... " entspricht, z.B.
Code: (dl )
1
2
3
4
$sql = qq~SELECT * FROM event_topic 
WHERE time BETWEEN '$time' AND '$etime'
AND (~
. join ...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tom
 2004-04-05 20:09
#31926 #31926
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Strat,04.04.2004, 22:07][sql]$sql = 'SELECT * FROM event_topic WHERE time BETWEEN "$time" AND "$etime" AND ('.joIN[/sql]
Wenn du da einfache Anfuehrungszeichen ' verwendest, wird $time nicht durch den Wert von $time ersetzt; dies funktioniert nur bei doppelten Anfuehrungszeichen "[/quote]
Wenn ich es in doppelte Anführungszeichen setze, dann steht der Name der Variable drin aber nicht der Inhalt der Variable.

Quote
Ich verwende da gerne qq~ .... ~, was " ... " entspricht, z.B.
Code: (dl )
1
2
3
4
$sql = qq~SELECT * FROM event_topic 
WHERE time BETWEEN '$time' AND '$etime'
AND (~
. join ...


Ich hatte immer qq{...} verwendet. Aber mit dem join klappt das irgendwie nicht, wie muss denn da der ausdruck lauten???

Denn so klappt das nicht.

[sql]$sql = qq{SELECT * FROM event_topic WHERE time BETWEEN '$time' AND '$etime' AND ('.join( $verkn ,@veranstalter).') OR ('.join( $verkn ,@veranstaltungsort).') OR ('.join( $verkn ,@location).') OR ('.join( $verkn ,@titel).') OR ('.join( $verkn ,@beschreibung).') ORDER BY time;};[/sql]

Da wird das join nicht interpretiert.

Danke

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Strat
 2004-04-05 23:58
#31927 #31927
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
da das join perl-code ist, wird der klaerweise nicht in anfuehrungszeichen ausgefuehrt.
Code: (dl )
1
2
3
4
$sql = qq ~SELECT * FROM event_topic WHERE time BETWEEN '$time' AND '$etime' AND (' ~ 
 . join( $verkn ,@veranstalter) . "') OR ('" . join( $verkn ,@veranstaltungsort) . "') OR ('"
 . join( $verkn ,@location) . "') OR ('" . join( $verkn ,@titel) . "') OR ('"
 . join( $verkn ,@beschreibung) . qq ~') ORDER BY time ~;


oder mit doppelten Anfuehrungszeichen
Code: (dl )
1
2
3
4
$sql = "SELECT * FROM event_topic WHERE time BETWEEN '$time' AND '$etime' AND ('" 
 . join( $verkn ,@veranstalter) . "') OR ('" . join( $verkn ,@veranstaltungsort) . "') OR ('"
 . join( $verkn ,@location) . "') OR ('" . join( $verkn ,@titel) . "') OR ('"
 . join( $verkn ,@beschreibung) . "') ORDER BY time";
\n\n

<!--EDIT|Strat|1081195210-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Tom
 2004-04-07 22:16
#31928 #31928
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke werde es testen.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
<< |< 1 2 3 >| >> 27 Einträge, 3 Seiten



View all threads created 2004-03-26 17:13.