Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > if Bedingung bei MySQL und verschachtelte Statements
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 27.03.2009, 13:50 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard if Bedingung bei MySQL und verschachtelte Statements

Hallo liebe Entwicklergemeinde,

ich habe vor ein paar Tagen in der MySQL-Dokumentation (http://dev.mysql.com/doc/refman/5.1/...functions.html) eine if-Bedingung entdeckt, komme aber mit dieser nicht so wirklich zurecht.

Ein Beispiel aus der Doku:

Code:
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
    ->     WHEN 2 THEN 'two' ELSE 'more' END;
        -> 'one'
Sinngemäß möchte ich
Code:
SELECT CASE einStringAusEinemFormular WHEN derInhaltDerSpalte:Name THEN SELECT 'Name' FROM 'table1' ELSE 'FALSE' END;
Also wenn der übergebene String aus einem Formular = dem Inhalt der aktuellen Datenzeile Name ist, dann soll er den Namen der aktuellen Datenzeile selektieren. Gibt es keinen Namen, der so lautet wie aus dem Formular, soll er FALSE ausgeben.
Ich weiß, dass ich DAS auch via LIKE matchen könnte, doch gehts mir hier einfach nur ums Prinzip ;) Ich könnte schließlich auch "einStringAusEinemFormular" und "derInhaltDerSpalte:Name" vorher mit einer Funktion bearbeiten.

Wie realisiere ich das? Und wie sage ich MySQL das es den Namen der aktuellen Datenzeile und nicht ALLE Namen selektieren soll?

Schade, dass nicht wie im PHP-Manual jedes Argument einzeln erklärt wird - das würde das Verständnis beschleunigen.

Vielen Dank!
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2009, 13:06 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Arbeitet von euch wirklich keiner mit if- und case-Bedingungen in MySQL?
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.07.2009, 16:17 Nach oben    #3
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

Was du haben möchtest ist ein

Code:
if
{
...
}
else
{
...
}
richtig?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.07.2009, 12:50 Nach oben    #4
Turnbeutelvergesser
 
Registriert seit: 18.08.2005
Beiträge: 41
Standard

Was hälst du von
Code:
SELECT CASE einStringAusEinemFormular WHEN derInhaltDerSpalte:Name THEN Name ELSE 'FALSE' END FROM table1;
?

da ich grad kein mysql zum testen hab, ungetestet.
Mirod ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.07.2009, 14:06 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.365
Standard

Ich denke das Problem ist, dass dich niemand verstanden hat. Ich hab's definitiv nicht. Selbst nach mehrmaligem lesen. Keinen Schimmer, was du da vorhast.

Gib uns doch mal ein konkretes Beispiel.
Sagen wir du hast die Tabelle User:
Code:
|   id    |        name        |        email        |
|---------+--------------------+---------------------|
| 1       | pago               | foo@bar.de          |
| 2       | nano               | foo@bar.de          |
| 3       | jago               | foo@bar.de          |
Und du möchtest jetzt eine Query, die z.B. nach "jago" sucht und entweder "jago" oder FALSE liefert? Oder was hast du nun vor?
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.07.2009, 21:58 Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Hallo,

danke für die noch späten Zuschriften.

Also erstmal: Das was ich ursprünglich wollte war absoluter Quatsch.

Was ich eigentlich wollte, sah - schematisch - so aus:

PHP-Code:
if((SELECT FROM x WHERE `title`='text') = 0)
{
     
SELECT FROM Y
}
else
{
      return 
FALSE;

In Worten: Wenn der Select in der if-Bedingung kein Resultat oder nicht das gewünschte Resultat liefert, möchte ich, dass er einen anderen Query direkt danach durchführt.
Dadurch erhoffe ich mir eine Performanceeinsparung.

Ich habe aber scheinbar fortwährend die falsche Syntax verwendet, bis ich es aufgegeben habe.

@PAGO
Eine Möglichkeit, nach deinem Beispiel, wäre:
Wenn er jago in der Tabelle "user" nicht findet, soll er nicht FALSE ausgeben, sondern eine andere Tabelle durchsuchen bzw. vielleicht auch einfach nur eine andere Spalte.

Geändert von Sekundentakt (06.07.2009 um 22:28 Uhr)
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2009, 14:32 Nach oben    #7
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.365
Standard

Achsoooo.

Eventuell könntest du das über Stored Procedures machen, wenn du das wolltest. Da kann ich dir aber nicht helfen - nie benutzt. ;)
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2009, 17:31 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Die klingen interessant, allerdings geht's mir hier vor allem um die if-else-Syntax von MySQL.
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2009, 22:03 Nach oben    #9
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

ich habe sowas zB in einem ORDER BY:
Code:
...
              ORDER BY
                  `spalte1` ASC,
                  `spalte2` ASC,
                  IF(`spalte3` = 'string', `spalte4', 'spalte5`)
...
So sortierte ich in Abhängigkeit vom Wert als Spalte3.

Meinst du sowas?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (07.07.2009 um 22:07 Uhr)
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2009, 22:59 Nach oben    #10
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.365
Standard

IF in MySQL ist einfach nur eine Funktion. Am besten vergleichbar vielleicht mit dem Ternary-Operator.
Oder, falls dir der nix sagt, mit folgender Funktion:
PHP-Code:
function iif($cond$true$false) {
    if(
$cond) return $true;
    else return 
$false;

Natürlich nicht direkt das gleiche, aber die Details sind jetzt grad nicht so wichtig. ;)

Punkt ist: IF in MySQL ist eine Funktion und kein "Statement".

Ungetestetes Beispiel (von jemandem, der das - glaube ich - einmal überhaupt benutzt hat...):
Code:
SELECT IF(u.name = 'pago', TRUE, FALSE) as is_me, u.id FROM users u
Natürlich wenig nützlich. ;)

Eventuell könnte man ein Sub-Select als Expression verwenden... müsste man mal ausprobieren. Dann könnte dein Beispiel vllt. doch hinhauen.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2009, 19:50 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

@Jann-Hendrik: Ja, das könnte zumindest schon mal helfen.
Gilt dein Beispiel nur für die Zeile die "string" enthält, oder für alle Zeilen, wenn eine von ihnen "string" enthält?

Gibt es so etwas auch ohne es auf einen bestimmten Wert zu beschränken? Also im Sinne von: Wenn die zurückgelieferte Ergebnissmenge kleiner als X ist, dann nehme einen anderen Wert?

SELECT Name FROM IF(mysql_affected_rows > 10, user, special_user) WHERE name = 'pago'

Das ist nur ein sinngemäßes Beispiel. Das mysql_affected_rows bezieht sich auf die PHP-Funktion und dient der illustration von dem, was ich mir exakt wünsche.

@ pago
Wie siehts mit dem Case-Statement aus?
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2009, 19:53 Nach oben    #12
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 3.198
Standard

Zitat:
Zitat von Sekundentakt Beitrag anzeigen
@Jann-Hendrik: Ja, das könnte zumindest schon mal helfen.
Gilt dein Beispiel nur für die Zeile die "string" enthält, oder für alle Zeilen, wenn eine von ihnen "string" enthält?
In dem Fall nur wenn das ausgewählte Feld dem string entspricht.
Ich denke aber, dass sich die Syntax auch auf andere Fälle erweitern lassen kann.


Ob sie sub-queries kann? Das weiß ich nicht. Das hängt aber auch davon ab, welche mysql-Version du verwendest!!!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2009, 20:10 Nach oben    #13
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Vielen Dank für dein schnelles Feedback.

Also meine aktuelle MySQL-Version kann Sub-Querys, allerdings scheint das nicht für das if-Statement zu funktionieren.
Schade.
Sekundentakt ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL RegExp nächste Zeile Sekundentakt Datenbanken 1 07.03.2009 15:45
Wieviel ist mysql wert? Jann Hendrik Nachrichten 8 19.01.2008 02:25
MySQL Abfrage Bedingung julien Datenbanken 4 06.08.2006 00:44
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47