SQL-Abfrage
am 10.09.2004 09:38:08 von Bernd Kuegle
Hallo Leute!
Kann mir bitte noch einmal jemand helfen. Habe nun schon 2 Stunden nur mit
dieser query-Abfrage vertan:
if ($select > 0) {
$vplz = "WHERE substr(trim(plz),0,1) = '".$select."'";
echo $vplz;
}
$query = "SELECT * FROM tbl_termine ".$vplz." order by plz DESC LIMIT
$start, $page_count";
Aber auch direkt in die Abfrage eingebaut, also ohne Variable klappt es
nicht:
$query = "SELECT * FROM tbl_termine WHERE substr(trim(plz),0,1) = '8' order
by plz DESC LIMIT $start, $page_count";
Wobei der Fehler in dem Teil --- WHERE substr(trim(plz),0,1) = '8' ---
liegen muss, da es ohne dem funktioniert. (substr(trim(plz),0,1) = '8'
funktioniert aber in einem php-Script problemlos!?)
Fehlermeldung:
WHERE substr(trim(plz),0,1) = '8'Anfrage fehlgeschlagen: You have an error
in your SQL syntax near '(trim(plz),0,1) = '8' order by plz DESC LIMIT 0, 3'
at line 1
Vielen Dank
Bernd
Re: SQL-Abfrage
am 10.09.2004 10:45:12 von Joerg Behrens
"Bernd Kuegle" schrieb im Newsbeitrag
news:414159e0$0$18786$91cee783@newsreader01.highway.telekom. at...
> Hallo Leute!
>
> Kann mir bitte noch einmal jemand helfen. Habe nun schon 2 Stunden nur mit
> dieser query-Abfrage vertan:
>
> if ($select > 0) {
> $vplz = "WHERE substr(trim(plz),0,1) = '".$select."'";
> echo $vplz;
> }
> $query = "SELECT * FROM tbl_termine ".$vplz." order by plz DESC LIMIT
> $start, $page_count";
>
> Aber auch direkt in die Abfrage eingebaut, also ohne Variable klappt es
> nicht:
> $query = "SELECT * FROM tbl_termine WHERE substr(trim(plz),0,1) = '8'
order
> by plz DESC LIMIT $start, $page_count";
>
> Wobei der Fehler in dem Teil --- WHERE substr(trim(plz),0,1) = '8' ---
> liegen muss, da es ohne dem funktioniert. (substr(trim(plz),0,1) = '8'
> funktioniert aber in einem php-Script problemlos!?)
>
> Fehlermeldung:
> WHERE substr(trim(plz),0,1) = '8'Anfrage fehlgeschlagen: You have an error
> in your SQL syntax near '(trim(plz),0,1) = '8' order by plz DESC LIMIT 0,
3'
> at line 1
MySQL hat eigene Stringbearbeitungsfunktionen welche aber anders lauten und
auch andere Parameter haben als die von PHP. Desweiteren ist in der WHERE
Clause normal ein spaltenname = wert zusuchen was bei dir voellig fehlt.
Also selbst wenn deine Stringbearbeitung funkt. wuerde kaeme ungueltiges
HTML heraus oder willst du mir sagen das du Spaltennamen hast welche da
lauten 1,2,3, .... ?
http://dev.mysql.com/doc/mysql/en/String_functions.html#IDX1 301
http://dev.mysql.com/doc/mysql/en/String_functions.html#IDX1 303
Wo du die PHP funktionen findest weist du ja
$stmt = sprintf("SELECT foo FROM tbl_termine WHERE plz = %d order by plz
DESC LIMIT %d, %d",
substr(trim($plz),0,1) ,
$start,
$page_count
):
Gruss
Joerg
--
TakeNet GmbH Mobil: 0171/60 57 963
D-97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
Re: SQL-Abfrage
am 10.09.2004 12:23:26 von tibor
Bernd Kuegle wrote:
> if ($select > 0) {
> $vplz = "WHERE substr(trim(plz),0,1) = '".$select."'";
> echo $vplz;
> }
> $query = "SELECT * FROM tbl_termine ".$vplz." order by plz DESC LIMIT
> $start, $page_count";
Also, zunächst mal halte ich nicht viel davon einen SQL-String so
zusammenzusetzen, was die Lesbarkeit des Codes angeht. Eher ratsam wäre
eine Konstruktion wie:
if ($select > 0) {
$sql = "SELECT xyz FROM abc WHERE ...";
}
else{
$sql = "SELECT xyz FROM abc";
}
Jetzt zu Deinem eigentlichen Problem:
$sql = "SELECT xyz FROM tbl_termine WHERE SUBSTRING(plz,0,1) =
'".$select."'";
oder
$sql = "SELECT xyz FROM tbl_termine WHERE plz like '".$select."%'";
sollten Dir weiterhelfen.
Und dann könntest Du Dir ja nochmal in der FAQ das Kapitel über SELECT *
ansehen... ;-)
MfG
Tibor
Re: SQL-Abfrage
am 10.09.2004 15:58:39 von Bernd Kuegle
Also das mit der SQL-Db ist ja ziemlich nervend. Die Abfrage funktioniert
einfach nicht. Musste nun einen Workaround vornehmen. Das geht.
$query = "SELECT * FROM tbl_termine WHERE plz >=80000 AND plz <=80000"
Soviel zu MySQL!
Grüße
Bernd
Re: SQL-Abfrage
am 10.09.2004 17:48:26 von Marian Heddesheimer
Sorry, ging versehentlich als e-Mail raus, daher hast du es wohl nicht
bekommen:
On Fri, 10 Sep 2004 09:38:08 +0200, in de.comp.lang.php.datenbanken
you wrote:
>$query = "SELECT * FROM tbl_termine WHERE substr(trim(plz),0,1) = '8' order
>by plz DESC LIMIT $start, $page_count";
>Fehlermeldung:
>WHERE substr(trim(plz),0,1) = '8'Anfrage fehlgeschlagen: You have an error
>in your SQL syntax near '(trim(plz),0,1) = '8' order by plz DESC LIMIT 0, 3'
>at line 1
stimmt, ist ja auch falsch, es muss heißen:
WHERE LEFT(TRIM(plz),1) = '8'
natürlich muss "plz" vom Typ char oder varchar sein.
oder auch
where substring(trim(kon_strPLZ),1,1) = '8'
Dokumentation lesen hilft hier meistens ;-)
Gruß
Marian
--
Tipps und Tricks zu PHP, Coaching und Projektbetreuung
http://www.heddesheimer.de/coaching/
Re: SQL-Abfrage
am 10.09.2004 18:04:42 von Axel Schwenke
"Bernd Kuegle" wrote:
> Also das mit der SQL-Db ist ja ziemlich nervend. Die Abfrage funktioniert
> einfach nicht. Musste nun einen Workaround vornehmen. Das geht.
> $query = "SELECT * FROM tbl_termine WHERE plz >=80000 AND plz <=80000"
>
> Soviel zu MySQL!
Laß mich raten, 'plz' ist vom Typ char()
Was wolltest du eigentlich?
<414159e0$0$18786$91cee783@newsreader01.highway.telekom.at>
SELECT ... FROM tbl_termine WHERE plz LIKE '8%'
oder wie oben:
SELECT ... FROM tbl_termine WHERE plz = '80000'
SELECT ... FROM tbl_termine WHERE plz+0 = 80000
SELECT ... FROM tbl_termine WHERE INT(plz) = 80000
Soviel zu deinen (my)SQL-Kenntnissen! (SCNR)
XL
Re: SQL-Abfrage
am 13.09.2004 09:10:55 von Bernd Kuegle
"Axel Schwenke" schrieb im Newsbeitrag
news:qajshc.bnb.ln@idefix.xl.local...
> "Bernd Kuegle" wrote:
> > Also das mit der SQL-Db ist ja ziemlich nervend. Die Abfrage
funktioniert
> > einfach nicht. Musste nun einen Workaround vornehmen. Das geht.
> > $query = "SELECT * FROM tbl_termine WHERE plz >=80000 AND plz <=80000"
> >
> > Soviel zu MySQL!
>
> Laß mich raten, 'plz' ist vom Typ char()
>
> Was wolltest du eigentlich?
>
> <414159e0$0$18786$91cee783@newsreader01.highway.telekom.at>
> SELECT ... FROM tbl_termine WHERE plz LIKE '8%'
>
> oder wie oben:
> SELECT ... FROM tbl_termine WHERE plz = '80000'
> SELECT ... FROM tbl_termine WHERE plz+0 = 80000
> SELECT ... FROM tbl_termine WHERE INT(plz) = 80000
>
> Soviel zu deinen (my)SQL-Kenntnissen! (SCNR)
>
>
> XL
Wollte alle PLZ bei denen die 1. Stelle der 5stelligen PLZ gleich ist.
Bernd
Re: SQL-Abfrage
am 13.09.2004 11:32:13 von Johannes Vogel
Bernd Kuegle wrote:
> "Axel Schwenke" schrieb:
>>Laß mich raten, 'plz' ist vom Typ char()
Von welchem Typ ist denn nun plz wirklich?
>>SELECT ... FROM tbl_termine WHERE plz LIKE '8%'
> Wollte alle PLZ bei denen die 1. Stelle der 5stelligen PLZ gleich ist.
Hier steht doch die Antwort...?
Das ist zudem sowieso noch viel schneller als ein substring, weil
Indices benutzt werden können.
HTH, Johannes
Re: SQL-Abfrage
am 20.07.2006 16:17:55 von dev-null-use-reply-adress
Hans-Jürgen Schneider schrieb:
>
> entschuldigt bitte, dass meine Frage erstmal nichts direkt mit PHP
> zu tun hat. Eine Antwort wisst Ihr aber allemal.
Möglich, ist aber keine Rechtfertigung. Wenn Du schon die passende
Datenbank-Newsgroup nicht gefunden hast, hättest Du aber wenigstens
in de.comp.lang.php.datenbanken posten können, meine ich.
> Bei zwei über Wert1 verknüpften Tabellen will ich Tabelle1 nach einem
> Wert2 filtern und einen Wert3 aus Tabelle2 holen.
> "select * from tabelle1,tabelle2 where tabelle1.wert2 = 'x' and
> tabelle1.wert1 = tabelle2.wert1"
> Jetzt ist Wert1 aber nicht immer in Tabelle2 zu finden. Trotzdem möchte
> ich die Zeile aus Tabelle1 haben.
Ich dachte, Du willst Wert3 aus Tabelle2 haben?
Naja, sei's drum:
SELECT foo, bar, xyz
FROM tabelle1 AS a
LEFT JOIN tabelle2 AS b
ON a.wert1 = b.wert1
WHERE a.wert2 = 'x'
16.1. Wie kann ich mehr über SQL lernen?
http://www.php-faq.de/q/q-sql-lernen.html
Gruß
JPM
xpost + f'up2 dclp.datenbanken