Wenn nichts gefunden default Wert nehmen

  • Schönen guten Abend,


    erstmal ein frohes neues Jahr 2015! Nun zu meinem kleinen Problem. Ich habe folgenden Code


    PHP
    $sql = "
    SELECT  *
    FROM   `anzeigen`
    WHERE seite = 'impressum'
    AND format = 468
      ORDER BY RAND()
      LIMIT 1
    ";


    Wenn er bei dieser Abfrage nichts findet, dann sollte bei WHERE seite = 'index' genommen werden, dann dort steht immer etwas drin. Kann ich dieses irgendwie verknüpfen? Meine PHP Kenntnisse sind leider noch nicht so gut.

  • Wenn ich Dich richtig verstehe, dann kast Du das gleich mit in der Query erledigen:


    BTW - was hat es mit ORDER BY RAND() auf sich?
    Gesprochen bedeutet die Query:
    "Gib mir alles von der Tabelle anzeigen,
    wo seite impressum enthält
    und format 468 enthält,
    sortiere dabei alle nach *Zufall*
    und gibt mir nur eine Zeile zurück."
    Das hieße ja, dass Du mehrere Zeilen 'impressum' hast, bei denen zufällige Zahlen in format stehen oO?

  • Guten Morgen,


    vielen Dank für deine schnelle Hilfe. Zu deiner Frage mit dem RAND(). Damit möchte ich folgendes erreichen:


    In meiner Datenbank kann es pro Seite mehrere Anzeigen geben, dass die der Reihe nach und per Zufall erscheinen dachte ich, dass ich dieses über RAND() ausgeben lasse, so ist garantiert dass jeder irgendwann mal zu sehen ist.


    Zu deinem Code habe ich auch noch eine Frage, warum hast du die erste Zeile nach dem WHERE in () gesetzt? Hat das eine spezielle Bedeutung? Habe ich bis jetzt noch nie gesehen.

  • Mit Klammern kannst Du verschiedene Bedingungen verschachteln.
    Hier im Fall heiß das:
    WENN (das ODER das) UND das

    SQL
    (seite = 'impressum' OR seite = 'index')  AND format = 468


    Ohne Klammern würde die Bedingung das AND nicht prüfen.


    Nimm Die mal Deinen Sql-Editor und teste mal ein bissl rum:

    SQL
    SELECT (false OR true) AND true; -- ergibt 1, also WAHR


    SQL
    SELECT (false OR true) AND false; -- ergibt immer 0, also nicht WAHR, denn das AND ist nie wahr


  • Ich hätte zu diesem Thema auch mal eine Frage, da ich diese Schreibweise doch sehr interessant finde. Meine Abfrage für die Meta-Daten sieht so aus:


    PHP
    // Datensatz aus der Datenbank auslesen für die Meta - Daten
    	$stmt = $mysqli->prepare("SELECT seiten_id, seiten_titel, seiten_description, og_title, og_type, og_description, og_image, seiten_keywords, seiten_robots, seiten_revisit_after, seiten_msvalidate, seiten_googlesiteverification, seiten_googleanalytics
    								 FROM web_seiteneinstellungen
    								 	WHERE seiten_id=1");
    
            $stmt->execute();
    	$stmt->bind_result($seiten_id, $seiten_titel, $seiten_description, $og_title, $og_type, $og_description, $og_image, $seiten_keywords, $seiten_robots, $seiten_revisit_after, $seiten_msvalidate, $seiten_googlesiteverification, $seiten_googleanalytics);
    	$stmt->fetch();
            $stmt->close();


    Die Ausgabe sieht dann so aus:


    PHP
    <?php if (strlen($seiten_titel) > 0): ?>
        <title><?php echo htmlspecialchars($seiten_titel);?></title>
        <?php endif;?>
    	<?php if (strlen($seiten_description) > 0): ?>
        <meta name="description" content="<?php echo $seiten_description;?>">
        <?php endif;?>
    	<?php if (strlen($seiten_keywords) > 0): ?>
        <meta name="keywords" content="<?php echo htmlspecialchars($seiten_keywords);?>" />
        <?php endif;?>


    Soweit klappt das auch ganz gut. Nun möchte ich aber für die einzelnen Seiten eigene Meta-Daten hinzufügen. Dazu füge ich eine weitere Spalte in der Tabelle ein die "seite" lautet. Dort steht dann z.B. impressum oder leistungen drin. So wenn ich nun auf Leistungen klicke, werden die Daten von Leistungen ausgelesen. Soweit auch noch kein Problem, wenn ich es richtig verstehe kann ich mit der () sagen wenn kein Eintrag vorhanden ist, dann springe auf die ID 1 zurück. Auch das habe ich weit verstanden. Aber was ist wenn dieser Fall Eintritt:


    Es wird ein Datensatz "impressum" gefunden. Einige Felder sind dort auch ausgefüllt nur das Feld "seiten_description" ist leer. Kann ich nun bei der Ausgabe also hier


    PHP
    <?php if (strlen($seiten_description) > 0): ?>
        <meta name="description" content="<?php echo $seiten_description;?>">
        <?php endif;?>


    sagen, wenn dieses Feld leer ist, dann nimmt diese Einstellungen vom "default" Datensatz? Ich hoffe du verstehst was ich meine.

  • Bitte, bitte schreib dein PHP sauber und übersichtlich, PHP bietet die die möglichkeit guten, sauberen, übersuchtilichen Code zu schreiben.. nutze sie!!
    Nutze geschweifte Klammern statt ' : ' bzw. ' endif; '


    Beispielsweise so: (und du kannst mir nicht erzählen das das langsamer, schwieriger, unübersichtlicher wäre! ^^ )

  • Also sorry, aber dein Code ist ja um einiges unübersichtlicher. Außerdem ist dieser Code von mir übersichtlich geschrieben. Was passt dir denn an den endif nicht? Hast du dir mal den Code von größten CMS System Joomla angeschaut? Da wird dieses so geschrieben!


    Aber deine Antwort beantwortet mir 0 die Frage, die ich gestellt habe.

  • Hier nochmal neuer versuch (meinen letzten Post in zwei teile geteilt :D )
    Übersichtlicher Code


    Teil 2 .. wenn nix gefunden anderes laden

    Es wird ein Datensatz "impressum" gefunden. Einige Felder sind dort auch ausgefüllt nur das Feld "seiten_description" ist leer. Kann ich nun bei der Ausgabe also hier

    PHP
    <?php if (strlen($seiten_description) > 0): ?>
        <meta name="description" content="<?php echo $seiten_description;?>">
        <?php endif;?>


    sagen, wenn dieses Feld leer ist, dann nimmt diese Einstellungen vom "default" Datensatz? Ich hoffe du verstehst was ich meine.


    Um es dir nicht komplett vorzukauen habe ich es halt mit dem Feld Keywords gemacht..


    EDIT:
    Achja, der sturköpfigkeit halber.. bitte zeig mir solchen Code hier mal: https://github.com/joomla/joomla-cms :thumbup:

  • Wieso beantwortet es deine Frage nicht? Es ist nicht via SQL gelöst.. dass stimmt, aber es ist gelöst.


    Ich sage nicht das es nicht benutzt wird, sondern das es der Übersicht nicht unbedingt weiterhilft, bei großen HTML-Code Pasagen im PHP kann es durchaus hilfreich sein, allerdings nicht wenn du in jeder Zeile ein <?php und ein ?> hast..
    Zeitlich verlangsamt das den Prozess..:
    Ausgabe:

    Code
    Ausfuehrung - 1: 1.3113021850586E-5
    Ausfuehrung - 2: 5.0067901611328E-6


    Script:


    Weiter muss das hier nicht diskutiert werden meiner Meinung nach, man sollte es in Maßen anwenden.. ;)


    EDIT:

  • Wieso beantwortet es deine Frage nicht? Es ist nicht via SQL gelöst.. dass stimmt, aber es ist gelöst.


    Und genau das war meine Frage, ob man das wie etwas weiter oben schon geschrieben solche Abfragen auch direkt im SQL lösbar ist. Deine Lösung ist mir schon klar, aber man hat zwei Abfragen auch dadurch wird der Code wieder unübersichtlicher und bei einer Wartung der Datenbank muss man an zwei Scripten arbeiten was meiner Meinung nach unnötig ist, wenn es auch anderes lösbar ist.

  • @Peter2014 Verstehe die Frage nicht: Wenn nichts gefunden default Wert nehmen
    :D
    Das mit den Klammern sollte michelle eigtl nur zeigen, dass man in SQL mit Klammer arbeiten kann, wie in anderen Sprachen auch.
    Aber auch IFs ect sind möglich.
    Weiß jetzt nicht ob das passt, aber das einfachste IF in einer SQL Abfrage wäre zB

    SQL
    SELECT 
        IF(`col_name` > 0, `col_name`, 'col ist nicht größer als 0') AS `col_name`
        -- WENN( BEDINGUNG , DANN, SONST) GENANNT `soundso`

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!