PHP / MySql Null Werte

bgauch

Mitglied
Hi zusammen

Brauche kurz eure Hilfe.

Ich habe eine MySql Tabelle in dem ein Attribut ein bis dreistellige Nummern enthält. Aber nicht jede Row hat einen Wert, manche sind NULL. Nun habe ich bei dem Output via HTML/PHP zwei Situationen.

A: Das Attribut ist smallint. Die erwähnten Rows sind NULL. Vorteil: Bei der Sortierung wird alles richtig sortiert, also durchgehend. Nachteil: Die Tabellenränder werden bei einem NULL Wert nicht dargestellt, die Tabelle sieht also nicht schön aus.

B: Das Attribut ist varchar. Statt NULL schreibe ich 'NA' in die Zelle. Vorteil: Die Tabelle wird richtig dargestellt. Nachteil: Bei der Sortierung sortiert es nicht 1,2,3 sondern 1, 10, 11…..2, 20, 21, etc. ….

Meine Frage: Kann ich bei einer Abfrage mit PHP einen NULL Wert durch einen Dummy Wert ersetzen ? Also, wenn NULL dann stelle z.B. 'NA' dar. Oder habe ich in der DB selber eine Möglichkeit etwas zu biegen dass ich entweder NULL oder einen alphanumerischen Wert setzen kann, und bei der Abfrage trotzdem die Sortierung stimmt ? Die Ziffer 0 will/kann ich nicht verwenden.

Danke für eure Hilfe.
 
Dann überprüf doch, ob das Result bzw. die aktuelle Row = NULL ist (bzw: strlen($row)==0) und gebe dann &nbsp (=Leerzeichen) oder etwas anderes aus.
 
Hi PuReSteeL

Wie gesagt, die Ziffer '0' möchte ich nicht verwenden. Lieber etwas alphanumerisches wie 'NA' sprich not available, oder eben eine leere Zelle.

Hi suye

Kannst du mir deine Lösung Anhand eines Beispieles verdeutlichen ? Sorry, bin Anfänger....

Das Attribut um das es geht ist history.number. Hier ein Ausschnitt aus dem Script:

PHP:
/** 
     *  Verarbeitung choicedate
     */ 
        // DB Abfrage 
        $anfrage2 =  "
            SELECT driver.fullname'driver', race.name'loc', team.name'team', car.name'car', season.short'short', history.number'number', season.full'comp'
                    
              FROM 
                    `driver`,`history`,`team`,`race`,`car`,`season` 
              WHERE 
                    race.date = '".mysql_real_escape_string($_POST['date'])."'
		AND history.driver1 = driver.id
		AND history.race = race.id
		AND race.season = season.id
		AND history.team = team.id
		AND history.car = car.id
		ORDER BY season.id, history.number"; 

$result2 = mysql_query($anfrage2);

// Wieviel wurde gefunden?

$rows2 = mysql_num_rows($result2);


// Den Kopf der HTML-Tabelle generieren
echo "<TABLE BORDER=\"1\">";
echo "<TR>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>COMP</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>COMPETITION</B></TD>";
echo "</TR>";


// Daten auslesen

for ($i2=0;$i2<$rows2;$i2++)                 // Die Ergebnisdatensätze werden in einer Schleife abgeholt

  {

  $data2 = mysql_fetch_object ($result2);


  echo "<TD>$data2->short</TD>";
  echo "<TD>$data2->comp</TD>";
  echo "</TR>";

  }

// Das Ende der HTML-Tabelle generieren
echo "</TABLE>";

?>
<p align="center">&nbsp;</p>
<p align="center">
<?php

// Den Kopf der HTML-Tabelle generieren
echo "<TABLE BORDER=\"1\">";
echo "<TR>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>COMPETITION</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>LOCATION</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>NUMBER</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>DRIVER</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>TEAM</B></TD>";
echo "<TD BGCOLOR=\"#BBBBBB\"><B>CAR</B></TD>";
echo "</TR>";

  {


  echo "<TD>$data2->short</TD>";
  echo "<TD>$data2->loc</TD>";
  echo "<TD>$data2->number</TD>";
  echo "<TD>$data2->driver</TD>";
  echo "<TD>$data2->team</TD>";
  echo "<TD>$data2->car</TD>";
  echo "</TR>";

  }

// Das Ende der HTML-Tabelle generieren
echo "</TABLE>";

?>
 
Suey's Lösung kannst Du auch im Query machen:
Code:
select
  ...,
  ...,
  if(tabelle.feld is null, 'Wert bei null', tabelle.feld) as Aliasfeld
from tabelle
...
Gruß hpvw
 
Zurück