php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.11.2011, 02:51  
Neuer Benutzer
 
Registriert seit: 12.10.2011
Beiträge: 13
PHP-Kenntnisse:
Anfänger
blnzg befindet sich auf einem aufstrebenden Ast
Standard SELECT Abfrage mit AND und OR funktioniert nicht

Hi Leute,

ich programmiere in PHP und benutze die DB phpMyAdmin.
Dort suche ich in einer Tabelle gleichzeitig nach zwei Datensätzen.
Die Tabelle ist folgendermaßen aufgebaut

word
id | languageID | text
1 | 1 | lucky
2 | 1 | happy
3 | 2 | glücklich

Meine Abfrage sieht so aus:
PHP-Code:
$sql "SELECT * FROM word WHERE languageID='{$languageID1}' AND text='{$voc1}' OR (languageID='{$languageID2}' AND text='{$voc2}')"
Leider funktioniert die irgendwie nicht.
Was mache ich falsch?
blnzg ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.11.2011, 03:06  
Neuer Benutzer
 
Registriert seit: 21.11.2011
Beiträge: 9
PHP-Kenntnisse:
Anfänger
JeremyK befindet sich auf einem aufstrebenden Ast
JeremyK eine Nachricht über MSN schicken JeremyK eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von blnzg Beitrag anzeigen

PHP-Code:
$sql "SELECT * FROM word WHERE languageID='{$languageID1}' AND text='{$voc1}' OR (languageID='{$languageID2}' AND text='{$voc2}')"
Der vollständigkeithalber phpmyadmin ist keine Datenbank. Die Datenbank ist MySQL. Phpmyadmin ist ein webbasiertes Datenbankmanagement System

$sql = "SELECT * FROM word WHERE languageID = '".$languageID1."' AND text = '".$voc1."' OR languageID = '".$languageID2."' AND text = '".$voc2."'";

oder

$sql = "SELECT * FROM word WHERE languageID = '$languageID1' AND text = '$voc1' OR languageID = '$languageID2' AND text = '$voc2'";

das sollte funktionieren...

mach doch mal die Anweisung mit phpmyadmin. Der sagt dir den Befehl ganz genau must dann nur noch

$sql = davor setzen und die SELECT anweisung in Klammern setzen

ach ja ; am schluss nicht vergessen

Hier nochmal der link zum MySQL Referenzhandbuch für oder Anweisungen;

http://dev.mysql.com/doc/refman/5.1/de/index-merge-optimization.html


Jeremy K.

Geändert von JeremyK (24.11.2011 um 03:22 Uhr).
JeremyK ist offline   Mit Zitat antworten
Alt 24.11.2011, 07:14  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
PHP-Code:
$sql "SELECT * FROM word WHERE languageID = '".$languageID1."' AND text = '".$voc1."' OR languageID = '".$languageID2."' AND text = '".$voc2."'"
oder

PHP-Code:
$sql "SELECT * FROM word WHERE languageID = '$languageID1' AND text = '$voc1' OR languageID = '$languageID2' AND text = '$voc2'"
Das ist doch beides exakt das selbe wie im Originalposting?

Schau dir erstmal an, wie dein Query wirklich aussieht (echo $sql) und nicht nur wie du ihn zusammenbaust. Und dann definiere "funktioniert irgendwie nicht" - Fehlermeldung? Kein Ergebnis? Falsche Ergebnisse?

Zitat:
Phpmyadmin ist ein webbasiertes Datenbankmanagement System
Das DBMS ist MySQL, phpMyAdmin ist nur eine Benutzeroberfläche - aber das nur der Vollständigkeit halber
fab ist offline   Mit Zitat antworten
Alt 24.11.2011, 10:06  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Ich sag jetzt mal: Klammern helfen bei sowas ungemein..
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 24.11.2011, 11:59  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

und zwar ihre richtige Verwendung ...

für language_id2 machst du ja schon "schön" eine Klammer drum (also alles was rechts vom OR steht) - nun das ganze noch für den Teil zwischen Where und OR und du bist auf dem richtigen Weg
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 24.11.2011, 12:05  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Zitat:
Zitat von JeremyK Beitrag anzeigen
ach ja ; am schluss nicht vergessen
Aber nicht in $sql von mysql_query($sql)

Zitat:
Hinweis: Die Anfrage sollte nicht mit einem Semikolon enden.
http://php.net/manual/de/function.mysql-query.php
__________________
Keine Zahl != ein Zeichen das keine Zahl ist
hausl ist offline   Mit Zitat antworten
Alt 24.11.2011, 17:43  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 26
PHP-Kenntnisse:
Fortgeschritten
grebaldi wird schon bald berühmt werden
Standard

Hi, blnzg!

Eigentlich macht MySQL da keine Anstalten, aber ich nehme an, dass languageID eher als Integer gespeichert wird, also gehören da keine Anführungszeichen dran.

Die Klammerung ist bei diesem Ausdruck im Übrigen egal, obwohl man sie der Übersicht halber trotzdem vornehmen sollte.

Ansonsten vermute ich mal, dass Du

a) die falschen Eingabewerte hast (reicht ja ein Leerzeichen, wenn du sie zum Beispiel von $_GET übernimmst), oder
b) einen Schreibfehler in der Tabellendefinition

beste grüße,
grebaldi
grebaldi ist offline   Mit Zitat antworten
Alt 25.11.2011, 09:29  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nein - die Klammerung ist bei seinem Problem die Lösung

Code:
WHERE 
 a and b or (c and d)
ist nunmal nicht das gleiche wie

Code:
where 
 (a and b) OR ( c and d)
- und so wie seine Abfrage ausschaut und was er darüber schreibt, bin ich mir absolut sicher, dass er die 2te Variante benötigt
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 25.11.2011, 15:20  
Neuer Benutzer
 
Registriert seit: 18.11.2011
Beiträge: 26
PHP-Kenntnisse:
Fortgeschritten
grebaldi wird schon bald berühmt werden
Standard

Die Operatorrangfolge ist (siehe hier):

1. Negation
2. Konjunktion
3. Disjunktion

Daher bedeuten die beiden Ausdrücke sehr wohl das Gleiche.

beste Grüße,
grebaldi

p.S.: Ich habe seine Abfrage an einer kleinen, entsprechenden Modell-DB mal ausprobiert. Die Abfrage läuft (mit auffindbaren Eingabe-Daten) mit oder ohne Klammern - völlig egal.

Geändert von grebaldi (25.11.2011 um 15:24 Uhr).
grebaldi ist offline   Mit Zitat antworten
Alt 25.11.2011, 16:44  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 1.140
PHP-Kenntnisse:
Anfänger
hausl wird schon bald berühmt werdenhausl wird schon bald berühmt werden
Standard

Zitat:
1. Negation
2. Konjunktion
3. Disjunktion
Und so klingt es für alle normalen Menschen, die nicht Informatik oder Mathematik studiert haben

Zitat:
AND und OR können auch gemischt verwendet werden, wobei AND jedoch Vorrang vor OR hat. Wenn Sie beide Operatoren verwenden, bietet sich die Verwendung von Klammern an, um exakt anzugeben, wie die Bedingungen gruppiert werden sollen
http://dev.mysql.com/doc/refman/5.1/...ting-rows.html
__________________
Keine Zahl != ein Zeichen das keine Zahl ist

Geändert von hausl (25.11.2011 um 17:23 Uhr).
hausl ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
abfrage mit and und, sql anweisung word, phpmyadmin suche funktioniert nicht, php abfrage or, php and und or

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum