php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 22-09-2003, 15:52
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem mit geparster WHERE Bedingung

Hab ein parser für eine WHERE Bedingung geschrieben.
OR wird als erstes behandelt, gefolgt von AND / NOT (gleichwertig).
Als Ergebnis vom parser bekomm ich (SELECT wurde ergänzt):
PHP-Code:
SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE UPPER('%co%')) OR 
(
UPPER(serverlink.directoryLIKE UPPER('%co%')) AND (UPPER(serverlink.file
LIKE UPPER('%val%')) OR (UPPER(serverlink.directoryLIKE UPPER('%val%')))

Array
(
    [
0] => Array
        (
            [
0] => 1
            
[id] => 1
            
[1] => C:/j2sdk1.4.2/doc/docs/api/java/awt/class-use/
            [
path] => C:/j2sdk1.4.2/doc/docs/api/java/awt/class-use/
            [
2] => 
            [
directory] => 
            [
3] => GraphicsConfiguration.html
            
[file] => GraphicsConfiguration.html
        
)

    [
1] => Array
        (
        ....
            [
2] => 
            [
directory] => 
            [
3] => GraphicsConfigTemplate.html
            
[file] => GraphicsConfigTemplate.html
        
)
        ...
    [
994] => Array
        (
            ....
            [
2] => 
            [
directory] => 
            [
3] => constant-values.html
            
[file] => constant-values.html
        

Wieso bekomm ich z.B. GraphicsConfiguration.html im Ergebnis zu Gesicht? Da ist doch "val" überhaupt nicht drin?

Und warum liefert mir:
PHP-Code:
SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE
UPPER
('%val%')) OR (UPPER(serverlink.directoryLIKE
UPPER
('%val%')) NOT (UPPER(serverlink.fileLIKE
UPPER
('%co%')) OR (UPPER(serverlink.directoryLIKE UPPER('%co%'))) 
überhaupt kein Ergebnis: Wenigstens im letzterem müsste es doch vorhanden sein.

Mfg Markus

Geändert von markusschmitt (22-09-2003 um 16:00 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 22-09-2003, 16:01
Wurzel
 Master
Links : Onlinestatus : Wurzel ist offline
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
Wurzel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

kleines klammerproblem? sollte das nicht so aussehen:
PHP-Code:
SELECT FROM serverlink WHERE
(
 (
 
UPPER(serverlink.fileLIKE UPPER('%co%')
 OR
 
UPPER(serverlink.directoryLIKE UPPER('%co%')
 )
 AND
 (
  
UPPER(serverlink.fileLIKE UPPER('%val%')
  OR
  
UPPER(serverlink.directoryLIKE UPPER('%val%')
 )

__________________
Kissolino.com
Mit Zitat antworten
  #3 (permalink)  
Alt 22-09-2003, 16:19
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab's mal von Hand nachgetippt
PHP-Code:
SELECT FROM serverlink WHERE
(
 (
   
UPPER(serverlink.fileLIKE UPPER('%co%'
    OR 
   
UPPER (serverlink.directoryLIKE UPPER ('%co%')
  ) 
  AND
  (
    
UPPER(serverlink.fileLIKE UPPER ('%val%')
     OR
    
UPPER (serverlink.directoryLIKE UPPER ('%val%')
  )

Ergebnis: NICHTS ????????? bzw. in PHPmyAdmin bekomm ich 20 results nur wenn ichs im normal ausführe "nichts".
Wenigstens der unter Datensatz hätte doch ausgegeben werden müssen.

Mfg Markus

Geändert von markusschmitt (22-09-2003 um 16:23 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 22-09-2003, 16:33
Wurzel
 Master
Links : Onlinestatus : Wurzel ist offline
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
Wurzel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich weiss ja nicht so genau, was du haben willst, aber and bindet stärker als or demzufolge sollte bei meiner auflistung zumindest "constant-values.html" gefunden werden, da in der spalte "file" sowohl "val" als auch "co" im begriff enthalten sind.
lass mal die zwei äusseren klammern weg:
PHP-Code:
SELECT FROM serverlink WHERE
//(
 
(
   
UPPER(serverlink.fileLIKE UPPER('%co%'
    OR 
   
UPPER (serverlink.directoryLIKE UPPER ('%co%')
  ) 
  AND
  (
    
UPPER(serverlink.fileLIKE UPPER ('%val%')
     OR
    
UPPER (serverlink.directoryLIKE UPPER ('%val%')
  )
//) 
__________________
Kissolino.com
Mit Zitat antworten
  #5 (permalink)  
Alt 22-09-2003, 17:04
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK habs nochmal umgeschrieben.
Hab deins 1 zu 1 kopiert. PHPmyAdmin liefert mir 20 richtige Results. Wenn ich es jedoch im Skript ausführe bekomm ich gar kein Ergebnis. Woran könnte das liegen?
Hab mal alles relevate geschwind zusammengeschrieben.
PHP-Code:
// Parser Ergebnis

SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE UPPER('%co%')) OR 
(
UPPER(serverlink.directoryLIKE UPPER('%co%')) AND (UPPER(serverlink.file
LIKE UPPER('%val%')) OR (UPPER(serverlink.directoryLIKE UPPER('%val%')))

// Abgeschriebenes Ergebnis:

SELECT FROM serverlink WHERE(UPPER(serverlink.fileLIKE UPPER('%co%') OR 
UPPER (serverlink.directoryLIKE UPPER ('%co%')) AND (UPPER(serverlink.file
LIKE UPPER ('%val%') OR UPPER (serverlink.directoryLIKE UPPER ('%val%'))


ausführende Datei

include("functions.inc.php");
include(
"class_db.inc.php");
$string "co AND val";
$arr = array("serverlink.file","serverlink.directory");
if(
$home parse_where($string,$arr,2))
{
    
$sql "SELECT * FROM serverlink ".$home;
    echo 
$sql."<br><br>";
    
$sql "SELECT * FROM serverlink WHERE(UPPER(serverlink.file) LIKE UPPER('%co%') OR UPPER (serverlink.directory) LIKE UPPER ('%co%')) AND (UPPER(serverlink.file) LIKE UPPER ('%val%') OR UPPER (serverlink.directory) LIKE UPPER ('%val%'))";
    echo 
$sql."<br>";
    
$db = new MySQL;
    if(
$db->init())
    {
        
$result $db->select($sql);
        echo 
"<pre>";
        
print_r($result);
        echo 
"</pre>";
    }
    else
    {echo 
"Fehler";}
}
else
{
    echo 
"FEHLER";
}

DB Select Funktion:

function 
select($sql="")
{
    if(empty(
$sql)) {return false;}
    if(!
eregi("^select",$sql))
    {
        echo 
"<h2>Falscher Befehl!</h2>\n";
        return 
false;
    }
    if(empty(
$this->CONN)) { return false; }
    
$conn $this->CONN;
    
$results mysql_query($sql,$conn);
    if((!
$results) or (empty($results)))
    {
        return 
false;
    }
    
$count 0;
    
$data = array();
    while(
$row mysql_fetch_array($results))
    {
        
$data[$count] = $row;
        
$count++;
    }
    return 
$data;

Mit Zitat antworten
  #6 (permalink)  
Alt 22-09-2003, 17:12
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK habs nochmal umgeschrieben.
Hab deins 1 zu 1 kopiert. PHPmyAdmin liefert mir 20 richtige Results. Wenn ich es jedoch im Skript ausführe bekomm ich gar kein Ergebnis. Woran könnte das liegen?
Hab mal alles relevate geschwind zusammengeschrieben.
PHP-Code:
// Parser Ergebnis

SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE UPPER('%co%')) OR 
(
UPPER(serverlink.directoryLIKE UPPER('%co%')) AND (UPPER(serverlink.file
LIKE UPPER('%val%')) OR (UPPER(serverlink.directoryLIKE UPPER('%val%')))

// Abgeschriebenes Ergebnis:

SELECT FROM serverlink WHERE(UPPER(serverlink.fileLIKE UPPER('%co%') OR 
UPPER (serverlink.directoryLIKE UPPER ('%co%')) AND (UPPER(serverlink.file
LIKE UPPER ('%val%') OR UPPER (serverlink.directoryLIKE UPPER ('%val%'))


ausführende Datei

include("functions.inc.php");
include(
"class_db.inc.php");
$string "co AND val";
$arr = array("serverlink.file","serverlink.directory");
if(
$home parse_where($string,$arr,2))
{
    
$sql "SELECT * FROM serverlink ".$home;
    echo 
$sql."<br><br>";
    
$sql "SELECT * FROM serverlink WHERE(UPPER(serverlink.file) LIKE UPPER('%co%') OR UPPER (serverlink.directory) LIKE UPPER ('%co%')) AND (UPPER(serverlink.file) LIKE UPPER ('%val%') OR UPPER (serverlink.directory) LIKE UPPER ('%val%'))";
    echo 
$sql."<br>";
    
$db = new MySQL;
    if(
$db->init())
    {
        
$result $db->select($sql);
        echo 
"<pre>";
        
print_r($result);
        echo 
"</pre>";
    }
    else
    {echo 
"Fehler";}
}
else
{
    echo 
"FEHLER";
}

DB Select Funktion:

function 
select($sql="")
{
    if(empty(
$sql)) {return false;}
    if(!
eregi("^select",$sql))
    {
        echo 
"<h2>Falscher Befehl!</h2>\n";
        return 
false;
    }
    if(empty(
$this->CONN)) { return false; }
    
$conn $this->CONN;
    
$results mysql_query($sql,$conn);
    if((!
$results) or (empty($results)))
    {
        return 
false;
    }
    
$count 0;
    
$data = array();
    while(
$row mysql_fetch_array($results))
    {
        
$data[$count] = $row;
        
$count++;
    }
    return 
$data;

Mit Zitat antworten
  #7 (permalink)  
Alt 22-09-2003, 17:12
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK habs nochmal umgeschrieben.
Hab deins 1 zu 1 kopiert. PHPmyAdmin liefert mir 20 richtige Results. Wenn ich es jedoch im Skript ausführe bekomm ich gar kein Ergebnis. Woran könnte das liegen?
Hab mal alles relevate geschwind zusammengeschrieben.
PHP-Code:
// Parser Ergebnis

SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE UPPER('%co%')) OR 
(
UPPER(serverlink.directoryLIKE UPPER('%co%')) AND (UPPER(serverlink.file
LIKE UPPER('%val%')) OR (UPPER(serverlink.directoryLIKE UPPER('%val%')))

// Abgeschriebenes Ergebnis:

SELECT FROM serverlink WHERE(UPPER(serverlink.fileLIKE UPPER('%co%') OR 
UPPER (serverlink.directoryLIKE UPPER ('%co%')) AND (UPPER(serverlink.file
LIKE UPPER ('%val%') OR UPPER (serverlink.directoryLIKE UPPER ('%val%'))


ausführende Datei

include("functions.inc.php");
include(
"class_db.inc.php");
$string "co AND val";
$arr = array("serverlink.file","serverlink.directory");
if(
$home parse_where($string,$arr,2))
{
    
$sql "SELECT * FROM serverlink ".$home;
    echo 
$sql."<br><br>";
    
$sql "SELECT * FROM serverlink WHERE(UPPER(serverlink.file) LIKE UPPER('%co%') OR UPPER (serverlink.directory) LIKE UPPER ('%co%')) AND (UPPER(serverlink.file) LIKE UPPER ('%val%') OR UPPER (serverlink.directory) LIKE UPPER ('%val%'))";
    echo 
$sql."<br>";
    
$db = new MySQL;
    if(
$db->init())
    {
        
$result $db->select($sql);
        echo 
"<pre>";
        
print_r($result);
        echo 
"</pre>";
    }
    else
    {echo 
"Fehler";}
}
else
{
    echo 
"FEHLER";
}

DB Select Funktion:

function 
select($sql="")
{
    if(empty(
$sql)) {return false;}
    if(!
eregi("^select",$sql))
    {
        echo 
"<h2>Falscher Befehl!</h2>\n";
        return 
false;
    }
    if(empty(
$this->CONN)) { return false; }
    
$conn $this->CONN;
    
$results mysql_query($sql,$conn);
    if((!
$results) or (empty($results)))
    {
        return 
false;
    }
    
$count 0;
    
$data = array();
    while(
$row mysql_fetch_array($results))
    {
        
$data[$count] = $row;
        
$count++;
    }
    return 
$data;

Mit Zitat antworten
  #8 (permalink)  
Alt 22-09-2003, 17:12
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK habs nochmal umgeschrieben.
Hab deins 1 zu 1 kopiert. PHPmyAdmin liefert mir 20 richtige Results. Wenn ich es jedoch im Skript ausführe bekomm ich gar kein Ergebnis. Woran könnte das liegen?
Hab mal alles relevate geschwind zusammengeschrieben.
PHP-Code:
// Parser Ergebnis

SELECT FROM serverlink WHERE ( (UPPER(serverlink.fileLIKE UPPER('%co%')) OR 
(
UPPER(serverlink.directoryLIKE UPPER('%co%')) AND (UPPER(serverlink.file
LIKE UPPER('%val%')) OR (UPPER(serverlink.directoryLIKE UPPER('%val%')))

// Abgeschriebenes Ergebnis:

SELECT FROM serverlink WHERE(UPPER(serverlink.fileLIKE UPPER('%co%') OR 
UPPER (serverlink.directoryLIKE UPPER ('%co%')) AND (UPPER(serverlink.file
LIKE UPPER ('%val%') OR UPPER (serverlink.directoryLIKE UPPER ('%val%'))


ausführende Datei

include("functions.inc.php");
include(
"class_db.inc.php");
$string "co AND val";
$arr = array("serverlink.file","serverlink.directory");
if(
$home parse_where($string,$arr,2))
{
    
$sql "SELECT * FROM serverlink ".$home;
    echo 
$sql."<br><br>";
    
$sql "SELECT * FROM serverlink WHERE(UPPER(serverlink.file) LIKE UPPER('%co%') OR UPPER (serverlink.directory) LIKE UPPER ('%co%')) AND (UPPER(serverlink.file) LIKE UPPER ('%val%') OR UPPER (serverlink.directory) LIKE UPPER ('%val%'))";
    echo 
$sql."<br>";
    
$db = new MySQL;
    if(
$db->init())
    {
        
$result $db->select($sql);
        echo 
"<pre>";
        
print_r($result);
        echo 
"</pre>";
    }
    else
    {echo 
"Fehler";}
}
else
{
    echo 
"FEHLER";
}

DB Select Funktion:

function 
select($sql="")
{
    if(empty(
$sql)) {return false;}
    if(!
eregi("^select",$sql))
    {
        echo 
"<h2>Falscher Befehl!</h2>\n";
        return 
false;
    }
    if(empty(
$this->CONN)) { return false; }
    
$conn $this->CONN;
    
$results mysql_query($sql,$conn);
    if((!
$results) or (empty($results)))
    {
        return 
false;
    }
    
$count 0;
    
$data = array();
    while(
$row mysql_fetch_array($results))
    {
        
$data[$count] = $row;
        
$count++;
    }
    return 
$data;

Mit Zitat antworten
  #9 (permalink)  
Alt 22-09-2003, 17:34
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Komisch: Hab nach UPPER die Leerzeichen entfernt und jetzt funktionierts.

Danke für die Hilfe

Noch ne Frage: Wo finde ich die Wertgkeitstabelle von OR, NOT usw. Hab in der Doc von mysql.de schon nachgeschaut aber nichts gefunden.


Mfg Markus
Mit Zitat antworten
  #10 (permalink)  
Alt 23-09-2003, 12:09
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab nochmal ne Frage bezüglich der Reihenfolge und der Klammerung.
Also wenn ich z.B. 2 OR und 2 And Bedingungen habe, soll alles in AND zwingend sein.
Nur wie erreiche ich dass?
So klappt es nicht
PHP-Code:
SELECT 
FROM serverlink
WHERE 
(
UPPERserverlink.file 
LIKE UPPER'%ex%' ) OR UPPERserverlink.directory 
LIKE UPPER'%ex%' 
) AND (
UPPERserverlink.file 
LIKE UPPER'%val%' ) OR UPPERserverlink.directory 
LIKE UPPER'%val%' 
) OR (
UPPERserverlink.file 
LIKE UPPER'%co%' ) OR UPPERserverlink.directory 
LIKE UPPER'%co%' 
) OR (
UPPERserverlink.file 
LIKE UPPER'%o%' ) OR UPPERserverlink.directory 
LIKE UPPER'%o%' 

Wie müsste die Abfrage richtig lauten?
(AND muss zwingend sein. Von Or muss in dem Fall nur eins zutreffen.)

Mfg Markus
Mit Zitat antworten
  #11 (permalink)  
Alt 23-09-2003, 12:10
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Code:
WHERE
  (bedingung1-1 OR bedingung 1-2)
  AND
  (bedingung 2-1 OR bedingung 2-2)
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #12 (permalink)  
Alt 23-09-2003, 13:20
markusschmitt
 Member
Links : Onlinestatus : markusschmitt ist offline
Registriert seit: Mar 2003
Beiträge: 391
markusschmitt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich muss dann alle OR AND sowie NOT Bedingungen zusammenfassen.

OK Danke

Mfg Markus
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.