# [MySql] Sql-Abfrage + bestimmte Datensätze ausschließen



## cadoc (27. Juli 2005)

Hallo

ich habe mal aus Übungszwecken eine Art Telefonbuch Datenbank erstellt,
die soweit auch prima funtioniert, aber es gibt noch einige Punkte die optimiert
werden könnten.

1. bestimmte Datensätze von der Abfrage auschließen:

```
$query="select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail from Telefonbuch WHERE Name LIKE 'F%' ORDER BY Name";
```

mit dieser Abfrage z.b. werden alle Datensätze angezeigt wo der Name mit einem
"F" anfängt. soweit so gut. 
Nun möchte ich aber das in dieser Auflistung keine Datensätze mit dem Namen
"FAX-Gerät" erscheinen. Was muss ich jetzt in der Abfrage ändern?

2. Sortierung der Abgefragten Daten

```
$query="select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail from Telefonbuch WHERE Bereich LIKE
  'Abteilung 1' ORDER BY Name";
$result = mysql_query($query);
?>

<table cellpadding="1" cellspacing="1">
<tr>
    <td>Name</td>
    <td>Vorname</td>
    <td>Bereich</td>
    <td>Funktion</td>
    <td>Zimmer</td>
    <td>Hausruf</td>
    <td>E-Mail</td>
</tr>

<?php
while($data=mysql_fetch_array($result)){
    echo '<tr>';
    if (!empty($data['Name'])) echo '<td>'.$data['Name'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Vorname'])) echo '<td>'.$data['Vorname'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Bereich'])) echo '<td>'.$data['Bereich'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Funktion'])) echo '<td>'.$data['Funktion'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Zimmer'])) echo '<td>'.$data['Zimmer'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Hausruf'])) echo '<td>'.$data['Hausruf'].'</td>';
    else echo '<td>&nbsp;</td>';

    if (!empty($data['Mail'])) echo '<td><a href="mailto:'.$data['Mail'].'">'.$data['Mail'].'</a></td>';
    else echo '<td>&nbsp;</td>';
    echo '</tr>'; }
    ?>
</table>
```

Diese Abfrage z.B. zeigt alle Datensätze aus dem Bereich "Abteilung 1" aufwärts sortiert an. 
Nun möchte ich aber das z.B. der Datensatz "FAX-Gerät" erst am Ende der Tabelle
angezeigt wird, d.h. erst sollen alle Beschäftigten aus dem Bereich aufgelistet werden
und danach das FAX-Gerät o.ä..

Bin für jeden Vorschlag offen um dieses Problem zu lösen.


----------



## WieGehts (27. Juli 2005)

Hallo,
zu 1:

```
select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail 
  from Telefonbuch 
  WHERE Name LIKE 'F%' AND Name <> 'FAX-Gerät'
  ORDER BY Name
```

zu 2:
In MSSQL würde ich folgendes versuchen:

```
select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail, 1 AS Sort 
  from Telefonbuch 
  WHERE Bereich = 'Abteilung 1' AND Name <> 'FAX-Gerät'
UNION
select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail, 2 AS Sort 
  from Telefonbuch 
  WHERE Bereich = 'Abteilung 1' AND Name = 'FAX-Gerät'
ORDER BY Sort, Name
```


----------



## cadoc (28. Juli 2005)

Danke funktioniert beides bestens. 



			
				WieGehts hat gesagt.:
			
		

> Hallo,
> zu 1:
> 
> ```
> ...



Die Idee hatte ich auch, allerdings hab ich "FAX-Gerät" mit "FAX%" 
	
	
	



```
WHERE Name LIKE 'F%' AND Name <> 'FAX%'
```
abgekürzt und das ging nicht.


----------



## WieGehts (28. Juli 2005)

Und funktioniert jetzt was oder nicht?


----------



## ManicMarble (28. Juli 2005)

cadoc hat gesagt.:
			
		

> Die Idee hatte ich auch, allerdings hab ich "FAX-Gerät" mit "FAX%"
> 
> 
> 
> ...


Abfragen mit "Joker-Zeichen" (% oder _) funktionieren nur in Verbindung mit LIKE oder (in Deinem Fall) mit NOT LIKE.

_Martin_


----------



## WieGehts (29. Juli 2005)

Oh,
entschuldige Cadoc, habe offensichtlich deine Antwort schlampig gelesen - erste Zeile übersehen.
Freut mich, dass ich die helfen konnte!


----------

