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 25-03-2013, 20:04
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard ISNULL Funktion anwenden

Hallöchen,
meine Tabelle hat folgende Struktur:
CREATE TABLE `ergebnisse` ( `sp_id` INT(11) NOT NULL AUTO_INCREMENT, `team_a` VARCHAR(50) NOT NULL DEFAULT '0', `team_b` VARCHAR(50) NOT NULL DEFAULT '0', `erg_1` INT(11) NULL, `erg_2` INT(11) NULL, `spieltag` DATETIME NOT NULL,

Da in erg_1 UND in erg_2 NULL steht wenn kein Ergebnis,
möchte ich diesen Inhalt mit der Funktion ISNULL überprüfen.

Mein nicht funktionierender Ansatz:
PHP-Code:
$abfrage "SELECT * 
            FROM ergebnisse
            IF(ISNULL(`erg_1`),'NULLIGER',`erg_1`) 
Habe das RTFM gelesen und auch andere Bsp-Seiten gesehen,
aber ich krieg das nicht hin.

Wäre schön wenn ich Hilfe bekommen könnte.
Mit Zitat antworten
  #2 (permalink)  
Alt 25-03-2013, 20:27
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ehmm, die Syntax macht so wenig Sinn. IF() muss in einem SELECT, WHERE, etc. Teil verwendet werden.
Mit Zitat antworten
  #3 (permalink)  
Alt 25-03-2013, 20:50
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Ehmm, die Syntax macht so wenig Sinn. IF() muss in einem SELECT, WHERE, etc. Teil verwendet werden.
Aber wieso scheint es so dann zu gehen?:

mysql> SELECT `name` AS 'Name',
> IF(ISNULL(`birthday`),
> 'Kein Datum angegeben', `birthday`)
> AS 'Geburtstag' FROM `members`;
+---------+----------------------+
| Name | Geburtstag |
+---------+----------------------+
| Philipp | 1979-02-06 |
| Janna | Kein Datum angegeben |
+---------+----------------------+

Quelle: » Teil II: MySQL » Listings » Kapitel 19: Ablaufsteuerung,Funktionen, Strings und Zahlen

So hatte ich es versucht.
Mit Zitat antworten
  #4 (permalink)  
Alt 25-03-2013, 20:53
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Dann zeig mal Datenbankstruktur, Testdaten und die richtige, fehlerfreie Abfrage.
Mit Zitat antworten
  #5 (permalink)  
Alt 25-03-2013, 21:03
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Tabellenstruktur: siehe erster Post.
Daten in der Tabelle ergebnisse:
sp_id / team_a / team_b / erg_1 /erg_2 / spieltag
1 / Karl / Nette / 3 / 0 / 2013-03-19 15:00:00
2 / Micha / Nette / 2 / 0 / 2013-03-20 00:00:00
3 / Micha / Karl / 3 / 0 / 2013-03-21 00:00:00
4 / Nette / Peter / (NULL) / (NULL) / 0000-00-00 00:00:00

Funktionierende Abfrage:
PHP-Code:
$abfrage 'SELECT * 
            FROM ergebnisse
            ORDER BY
            spieltag'

Ich hoffe das hilft :-)

Geändert von Wasser_Wanderer (25-03-2013 um 21:09 Uhr) Grund: Fehler in sp_id (2 war doppelt)
Mit Zitat antworten
  #6 (permalink)  
Alt 25-03-2013, 21:12
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Und wo ist jetzt die Abfrage, die Probleme macht?
Mit Zitat antworten
  #7 (permalink)  
Alt 25-03-2013, 21:18
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Und wo ist jetzt die Abfrage, die Probleme macht?
So frage ich die Tabelle zur Zeit ab:
PHP-Code:
// mySQL-Abfrage:
$abfrage 'SELECT * 
            FROM ergebnisse
            ORDER BY
            spieltag'
;
$ergebnis mysql_query($abfrage);

// Anzahl der Datensätze und Anzahl der Datenfelder bestimmen:
$anzahl_datensaetze mysql_num_rows($ergebnis);
$anzahl_felder mysql_num_fields($ergebnis);
 
// Tabelle beginnen
echo "<table border = '1'>";
 
// Erste Zeile
echo "<tr>";
 
// Schleife 1: Für jedes Feld wird eine th-Zelle erzeugt und der Name eingesetzt:
for ($n 0$n $anzahl_felder$n++) {
    
$feldname =  mysql_field_name($ergebnis$n);
    echo 
"<th>" $feldname "</th>";
    }
echo 
"</tr>";
 
// Schleife 2: Für jeden Datensatz wird ein foreach durchgeführt:
while ($datensatz mysql_fetch_assoc($ergebnis)) {
    
// Neues ARRAY zur weiter Verarbeitung
  
$new_array[] = $datensatz;
  
  echo 
"<tr>";
    
// Schleife 2-1: Für jeden Wert des Arrays wird eine Zelle erzeugt und der Wert des Arrays ausgegeben:
    
foreach ($datensatz as $key => $value) {
  
    echo 
"<td>" $value "</td>";
          }
    echo 
"</tr>";
    }
echo 
"</table>"
Da nun das Ausgabe TD-Feld leer bleibt (bei NULL in der DB) wollte ich einen String-Platzhalter setzen in der Ausgabe. Zb ein "-" wenn (NULL) in der DB-Tabelle: ergebnisse
Mit Zitat antworten
  #8 (permalink)  
Alt 25-03-2013, 21:22
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
if ($value === null) {
    echo 
'-';
} else {
    echo 
$value;

Mit Zitat antworten
  #9 (permalink)  
Alt 25-03-2013, 21:30
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
PHP-Code:
if ($value === null) {
    echo 
'-';
} else {
    echo 
$value;

Autsch. Aua.

Lieben Dank h3ll
(Und ich hampel mir da einen ab im SQL-Query)
Mit Zitat antworten
  #10 (permalink)  
Alt 26-03-2013, 22:13
raiguen
 Registrierter Benutzer
Links : Onlinestatus : raiguen ist offline
Registriert seit: Feb 2012
Beiträge: 8
raiguen befindet sich auf einem aufstrebenden Ast
Standard

Lässt sich sehrt gut und komfortabel in SQL abbilden, so denn es richtig gemacht wird:
Code:
SELECT `team_a`
     , `team_b` 
     , IF(ISNULL(`erg_1`),'NULLIGER_1',`erg_1`) 
     , IF(ISNULL(`erg_2`),'NULLIGER_2',`erg_2`)
     , `spieltag` 
FROM ergebnisse
              
Wichtig ist hier, dass im SELECT ALLE im Ergebnis benötigte Spalten namentlich angegeben werden müssen (wie im deinem zitierten Beispiel, Post #3).

Und mit diesem richtig funktionierenden SQL-Statement braucht's in PHP keine umständliche IF-Abfrage mehr weil der 'NULL'_Ersatzwert ja schon in dem Abfragearray enthalten ist.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-03-2013, 22:15
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Die Frage ist eher, ob ein Teil, der eindeutig zur Ausgabelogik zählt, etwas in einer Datenbankabfrage verloren hat. Also ich würde davon abraten es so zu machen.
Mit Zitat antworten
  #12 (permalink)  
Alt 27-03-2013, 14:40
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Die Frage ist eher, ob ein Teil, der eindeutig zur Ausgabelogik zählt, etwas in einer Datenbankabfrage verloren hat. Also ich würde davon abraten es so zu machen.
Ich würde ja auch gerne auf NULL in der DB verzichten.
Aber wenn ich ein INT-Feld habe und dieses als Standard belegen will, dann geht 0 nicht, da das Spiel nicht stattgefunden hat. Also suchte ich nach einer Alternative mit NULL.

Wenn es eine bessere Lösung gibt dann wäre ich für Vorschläge dankbar.

Zur Erklärung: Ich hatte alles bisher in txt-Dateien und will es auf DB umstellen.
Aber ich fange erst mit SQL an und die Abfrage-Syntax ist mir noch nicht so geläufig.

@raiguen:
Danke für deinen Tipp. Ich hab es so umgesetzt:
SELECT `team_a` , `team_b` , IF(ISNULL(`erg_1`),'NULLIGER_1',`erg_1`) AS `Sp1` , IF(ISNULL(`erg_2`),'NULLIGER_2',`erg_2`) AS `Sp2` , `spieltag` FROM ergebnisse
Mit Zitat antworten
  #13 (permalink)  
Alt 27-03-2013, 14:50
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Wasser_Wanderer Beitrag anzeigen
Ich würde ja auch gerne auf NULL in der DB verzichten.
Das hab ich nicht gesagt. NULL-Werte können in der Datenhaltung sehr wohl sinnvoll sein. Aber die Datenhaltung hat nichts mit der Ausgabe zu tun. Das sind zwei verschiedene Themen.

Wenn du bei "keinem Wert", also NULL-Wert ein bestimmtest Zeichen oder einen Text ausgeben möchtest, ist das Aufgabe der Präsentationsschicht und nicht der Datenhaltungsschicht. Wie gesagt, das hat nichts mit der Datenbank zu tun und somit auch nichts in der Datenbankabfrage verloren.
Mit Zitat antworten
  #14 (permalink)  
Alt 27-03-2013, 14:55
Wasser_Wanderer
 Registrierter Benutzer
Links : Onlinestatus : Wasser_Wanderer ist offline
Registriert seit: Aug 2011
Beiträge: 225
Wasser_Wanderer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Wie gesagt, das hat nichts mit der Datenbank zu tun und somit auch nichts in der Datenbankabfrage verloren.
Das habe ich nicht verstanden. Könntest du mir das bitte mit einfachen Worten beschreiben?
Mit Zitat antworten
  #15 (permalink)  
Alt 27-03-2013, 15:04
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Eine Anwendung ist (wenn sie korrekt programmiert wurde) in drei Schichten aufgeteilt:

1. Präsentationsschicht (HTML-Ausgabe, Formulare, etc.)
2. Business-Schicht (das "Hirn" der Anwendung)
3. Datenhaltungsschicht (Datenbankabfragen, etc.)

Die Präsentationsschicht greift niemals direkt auf die Datenbank zu, sondern geht über Business- und Datenhaltungsschicht. Also die Präsentationsschicht sagt der Business-Schicht "ich möchte diese und diese Daten haben". Die Business-Schicht stellte eine Anfrage an die Datenhaltungsschicht, die letztendlich die Datenbankabfrage macht. Daraufhin geht der weg wieder zurück zur Präsentationsschicht. Die Präsentationsschicht kann jetzt entscheiden, ob sie NULL-Werte einfach nicht ausgibt (also leer lässt) oder ob stattdessen ein Platzhalter eingefügt werden soll. Das hat allerdings nichts mehr mit der Datenbank zu tun. Die ist schon lange fertig und sagt "geht mich nix an, was du mit den Daten machst".

Das hat dann unter anderem den Vorteil, dass du auch verschiedene Datenquellen verwenden könntest. zB. eine andere Nicht-SQL-Datenbank, eine Textdatei, eine XML-Datei, ein Webservice, usw. Das kann wiederum der Präsentationsschicht egal sein. Sie hat sich nicht dafür zu interessieren, woher ihre Daten kommen. Eine Präsentationsschicht baut auch keine SQL-Abfragen zusammen, weil ansonsten würde sie ja die zwei unteren Schichten umgehen und direkt eine Abhängigkeit zu einer Datenbank schaffen.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
LIMIT mehrfach anwenden FloSch SQL / Datenbanken 10 30-04-2008 12:09
Funktion auf mehrere Variablen anwenden erikbln PHP Developer Forum 6 10-08-2007 01:05
wie eval anwenden? lyco PHP Developer Forum 5 29-12-2006 23:33
[MSSQL] Frage zu CASE iSNULL jaqu ASP, PERL, CGI, C und alles andere 11 22-09-2006 12:50
Replace Explizit anwenden Michael8576 SQL / Datenbanken 3 01-05-2006 21:52

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

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

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:45 Uhr.