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

cadoc

Grünschnabel
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:
PHP:
$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
PHP:
$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. :)
 
Hallo,
zu 1:
Code:
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:
Code:
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
 
Danke funktioniert beides bestens.

WieGehts hat gesagt.:
Hallo,
zu 1:
Code:
select Name, Vorname, Bereich, Funktion, Zimmer, Hausruf, Mail 
  from Telefonbuch 
  WHERE Name LIKE 'F%' AND Name <> 'FAX-Gerät'
  ORDER BY Name

Die Idee hatte ich auch, allerdings hab ich "FAX-Gerät" mit "FAX%"
Code:
WHERE Name LIKE 'F%' AND Name <> 'FAX%'
abgekürzt und das ging nicht.
 
cadoc hat gesagt.:
Die Idee hatte ich auch, allerdings hab ich "FAX-Gerät" mit "FAX%"
Code:
WHERE Name LIKE 'F%' AND Name <> 'FAX%'
abgekürzt und das ging nicht.
Abfragen mit "Joker-Zeichen" (% oder _) funktionieren nur in Verbindung mit LIKE oder (in Deinem Fall) mit NOT LIKE.

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

Neue Beiträge

Zurück