PHP Frage zu MYSQL Abfrage

phoenix430

Lt. Commander
Registriert
Juni 2008
Beiträge
1.446
Hallo Leute,

wahrscheinlich ist es eine dumme Frage und für euch selbstverständlich, aber ich weiß Partut nicht wie ich das umsetzen kann.

Ich habe eine SQL Datenbank in der es eine Tabelle "ausgeliehen" gibt. Ich würde gerne eine Abfrage machen und bei der Ausgabe soll er mir nur sagen ob Buch xyz momentan verfügbar ist, oder ob es ausgeliehen ist.
Es gibt auch nur diese eine Tabelle, ich brauche also kein Inner oder Left Join. Wie ich eine Abfrage erstelle mit Querry usw. ist mir klar.

Ich weiß nur nicht wie ich es realisieren kann, dass mir im Ergebis angezeigt wird ob nun das Buch verfügbar ist oder nicht.
Gibt es eine mysql abfrage mit if/else?
 
Tabelle:

ISBN | buchtitel | anzahl der exemplare auf lager |

PHP-Schleife (pseudo):

if ($anzahlexemplare == 0){

...

}

Mysql-statement (pseudo...):

Select 'anzahl' From buchverwaltung where titel=$titel

oder eben über isbn statt buchname :)

so würde ichs spontan machen ^^
wenn du eh vorhast, von jedem buch nur eins zu haben, dann kannst du statt anzahl auch einen eintrag "auf lager" (boolean) machen.
das mit der anzahl ist aber imho universeller.
 
Zuletzt bearbeitet:
ja sowas in der art gibt es. nimm die case-anweisung in verbindung mit einem select.

Wertet eine Liste von Bedingungen aus und gibt einen von mehreren möglichen Ergebnisausdrücken zurück.

Der CASE-Ausdruck verfügt über zwei Formate:

Beim einfachen CASE-Ausdruck wird ein Ausdruck mit mehreren einfachen Ausdrücken verglichen, um das Ergebnis zu ermitteln.


Beim durchsuchten CASE-Ausdruck wird eine Reihe von booleschen Ausdrücken ausgewertet, um das Ergebnis zu ermitteln.


Bei beiden Formaten wird ein optionales ELSE-Argument unterstützt.

CASE kann in allen Anweisungen oder Klauseln verwendet werden, in denen gültige Ausdrücke zulässig sind. So kann CASE z. B. in Ausdrücken wie SELECT, UPDATE, DELETE und SET und in Klauseln wie "select_list", IN, WHERE, ORDER BY und HAVING verwendet werden.

Transact-SQL-Syntaxkonventionen

Syntax

Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
 
Vielen dank für deine schnelle Antwort,

werde ich gleich mal ausprobieren. Ich hatte allerdings vergessen zu schreiben das ich in meiner Tabelle eine Spalte rueckgabedatum habe. Ist ein Wert dort drin, so gibt es das Buch. Ist kein Wert eingetragen, ist das Buch ausgeliehen.

Kann ich das so auch mit deinem Vorschlag lösen? Ich kann ja nicht sagen Select From "buchverwaltung" where titel=$titel , da ich ja nach dem Rückgabedatum vergleichen möchte.

Wenn es denn überhaupt geht?
Ergänzung ()

tm0975 schrieb:
ja sowas in der art gibt es. nimm die case-anweisung in verbindung mit einem select.

Wertet eine Liste von Bedingungen aus und gibt einen von mehreren möglichen Ergebnisausdrücken zurück.

Der CASE-Ausdruck verfügt über zwei Formate:

Beim einfachen CASE-Ausdruck wird ein Ausdruck mit mehreren einfachen Ausdrücken verglichen, um das Ergebnis zu ermitteln.


Beim durchsuchten CASE-Ausdruck wird eine Reihe von booleschen Ausdrücken ausgewertet, um das Ergebnis zu ermitteln.


Bei beiden Formaten wird ein optionales ELSE-Argument unterstützt.

CASE kann in allen Anweisungen oder Klauseln verwendet werden, in denen gültige Ausdrücke zulässig sind. So kann CASE z. B. in Ausdrücken wie SELECT, UPDATE, DELETE und SET und in Klauseln wie "select_list", IN, WHERE, ORDER BY und HAVING verwendet werden.

Transact-SQL-Syntaxkonventionen

Syntax

Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END


Vielen Dank genau sowas habe ich gesucht
 
phoenix430 schrieb:
Vielen dank für deine schnelle Antwort,

werde ich gleich mal ausprobieren. Ich hatte allerdings vergessen zu schreiben das ich in meiner Tabelle eine Spalte rueckgabedatum habe. Ist ein Wert dort drin, so gibt es das Buch. Ist kein Wert eingetragen, ist das Buch ausgeliehen.

Kann ich das so auch mit deinem Vorschlag lösen? Ich kann ja nicht sagen Select From "buchverwaltung" where titel=$titel , da ich ja nach dem Rückgabedatum vergleichen möchte.

Wenn es denn überhaupt geht?
Ergänzung ()

Vielen Dank genau sowas habe ich gesucht

Naja wenns zurückgegeben wird müsste ne andere Funktion "Rückgabe" halt einfach den wert der vorhandenen Anzahl um eins inkrementieren ;)
 
select titel, status = case when Rückgabedatum is null then 'verfügbar' else 'verliehen' end
from buchverwaltung
 
Danke ich habe es jetzt so gelöst
SELECT IF(ISNULL(rueckgabedatum),'Titel ist ausgeliehen', 'Titel ist verfügbar') AS status FROM ausgeliehen
 
ja so kann man es auch machen. wichtig ist dabei, eine gewisse übersichtlichkeit und systematik beizubehalten. das mag für ein einmalprojekt nciht so wichtig sein, aber wenn im team gearbeitet oder über jahre entwickelt bzw weiterentwickelt wird, ist das sehr entscheidend.
 
So ich habe leider nochmal eine Frage.
Ich habe ein Formular in dem man in Drop down Menüs Werte aussuchen kann. Klickt man dann auf Submit, so werden diese Werte in eine Tabelle ausgegeben.
Soweit funktioniert dies auch alles.
Nun habe ich aber 2 SELECT Befehle. Einmal für das Formular und den einen um zu schauen ob ein Titel verfügbar ist oder nicht.
Zur Übersicht mal mein Quelltext von meiner Abfrage
PHP:
$auswertung = "SELECT * FROM titel WHERE";
    $auswertung.= $abfrage;
    $ergebnis = mysql_query($auswertung);
    while($row = mysql_fetch_object($ergebnis)){
    echo '<tr>'."\r\n";
    echo '<td><a href = "weiterleiten.php?id='.$row->ID.'" target ="blank"/>'.$row->Titel.'</a></td>'."\r\n";
    echo '<td>'.$row->Komponist.'</td>'."\r\n";
    echo '<td>'.$row->Herausgeber.'</td>'."\r\n";
    echo '<td>'.$row->Verlag.'</td>'."\r\n";
    echo '<td>'.$row->Ausgeliehen.'</td>'."\r\n";
    echo '</tr>';
    }
    echo '</table>';
In dieser Spalte
PHP:
    echo '<td>'.$row->Ausgeliehen.'</td>'."\r\n";
soll mir angezeigt werden, ob ein Titel vorhanden ist oder nicht.
Dazu habe ich folgende SQL Abfrage
Code:
SELECT IF(ISNULL(rueckgabedatum),'Titel ist ausgeliehen', 'Titel ist verfügbar') AS Ausgeliehen FROM ausgeliehen,titel WHERE ausgeliehen.Titelnr =  titel.ID

Meine Frage ist, kann ich meine zwei SQL Abfragen zusammenführen? Ich habe im internet etwas von "UNION" gelesen aber nicht verstanden. Ansonsten wie könnte ich dies realisieren?
Muss ich "einfach"
PHP:
$auswertung2 = "mein zweites SELECT";
anlegen?
 
Das sollte mit einem einfachen Join gehen normalerweise:
Code:
SELECT
t.Komponist,
t.Herausgeber,
t.Verlag,
CASE WHEN a.rueckgabedatum Is Null Then 'Titel ist ausgeliehen' Else 'Titel ist verfügbar' End As Ausgeliehen
FROM titel t
LEFT JOIN ausgeliehen a
ON a.Titelnr =  t.ID
(evtl. auch Inner Join aber das hängt vom genauen Datenmodell ab)
 
Zurück
Oben