MySQL Abfrage mit PHP if Abfrage vergleichen

son gohan

Erfahrenes Mitglied
Datenfeld aus MySQL Tabelle mit PHP if Abfrage vergleichen

Es folgt eine kurze Erklärung zum Script und danach das Problem darunter ;).

PHP:
<?php
   $res = mysql_db_query("DB007", "SELECT * FROM links WHERE MATCH name AGAINST ('$tit')");
   $num = mysql_num_rows($res);

   if ($num == 0) { echo ""; } else { echo "<p class=\"frage_1\">Weiterf&uuml;hrende Themen</p>
<ul class=\"frage\">"; }

  for ($i=0; $i<$num; $i++)
   {
      $vn = mysql_result($res, $i, "url");
      $nn = mysql_result($res, $i, "name");


      echo "<li><a href=\"$vn\">$nn <img class=\"wft_bild\" src=\"gif/schrift.gif\" alt=\"$nn\" title=\"$nn\" /></a></li>\n";
   }

   if ($num == 0) { echo ""; } else { echo "</ul>"; }

   mysql_close($db);
?>

Erklärung:

Das Script vergleicht mit der mysql_db_query Abfrage zunächst ob Einträge in der Tabelle sind die der Variable &tit ähneln und speichert die Ergebnisse in eine Variable $res.

Danach speichert es mit mysql_num_rows die Anzahl an Datensätze aus der Abfrage in eine Variable $num.

Mit der Variable $num vergleiche ich dann ob Datensätze gefunden wurden, wenn das der Fall ist werden zunächst mit Hilfe der If-Abfrage die Anfangs und Endtags der ul Liste ausgegeben.

Die einzelnen Listenpunkte zu der ul Liste werden wiederum mit Hilfe der for Schleife und anhand der Abfrage Ergebnisse erzeugt.

Alles klar bis hier hin :) gut dann kann es ja weiter gehen zu meinem Problem...

Problem:
Die Tabelle hat noch ein Datenfeld mit Namen infoart, dort speichere ich jeweils die Art des Datensatzes, in meinem Fall handelt es sich um Hyperlinks die entweder zu einer Video oder Text Info führen, in die Spalten des Datenfeldes infoart schreibe ich dazu entweder video oder text zur Unterscheidung.

Jetzt habe ich in jedem Listenpunkt aus der for Schleife aber noch ein img Tag wo standardmässig ein gif Bild steht mit dem Namen schrift.gif, für Textinfos gedacht. Wenn es sich aber bei einem Datensatz um eine Video Info handelt, dann will ich das dort ein video.gif ausgegeben wird.

Ich habe auch schon überlegt das man das vielleicht einfach mit einer if-Abfrage lösen könnte. So das immer wenn es sich um einen Datensatz mit der Art video im Datenfeld infoart handelt ein video.gif ausgegeben wird als echo.
Aber ich weis nicht wie ich auf das Datenfeld infoart aus der Tabelle zugreifen kann um so eine if-Abfrage schreiben zu können.


Ich würde nur zu gern wissen wie man das lösen kann.
 
Zuletzt bearbeitet:
Re: Datenfeld aus MySQL Tabelle mit PHP if Abfrage vergleichen

Hallo, an alle die keine Lust haben die ganze Problemstellung aus dem oberen Beitrag zu lesen poste ich hier das Problem noch mal in Kurzform:

Ich habe auch schon überlegt das man das vielleicht einfach mit einer if-Abfrage lösen könnte. So das immer wenn es sich um einen Datensatz mit der Art video im Datenfeld infoart handelt ein video.gif ausgegeben wird als echo.
Aber ich weis nicht wie ich auf das Datenfeld infoart aus der Tabelle zugreifen kann um so eine if-Abfrage schreiben zu können.


Also wie kann ich in einer PHP if Abfrage auf Datenfelder aus der MySQL Tabelle zugerifen:

PHP:
<?php if (Datenfeld infoart gleich video, dann echo, ansonsten nichts echo ;) ) { echo "video.gif"; } ?>
 
Zuletzt bearbeitet:
Mein Vorschlag:
PHP:
<?php
    $res = mysql_db_query("DB007",
        "SELECT * FROM links WHERE MATCH name AGAINST ('$tit')");

    if (mysql_num_rows($res) > 0) {
        echo '<p class="frage_1">Weiterf&uuml;hrende Themen</p>'
            ."\n"
            .'<ul class="frage">';
        while ($row = mysql_fetch_assoc($res)) {
            echo '<li><a href="'
                .$row['url']
                .'">'
                .$row['name'];

            if ($row['infoart']=='video') {
                echo ' <img class="wft_bild" '
                    .'src="gif/video.gif" alt="';
            } else {
                echo ' <img class="wft_bild" '
                    .'src="gif/schrift.gif" alt="';
            }
            
            echo $row['name']
                .'" title="'
                .$row['name']
                .'" /></a></li>'
                ."\n";
        }
        echo "</ul>";
    }
?>
Gruß hpvw
 
Hallo hpvw,

das ist eine gute Lösung die auch funktioniert. Danke sehr. Ich habe mir für die nächsten Wochen ein paar PHP Turoials vorgenommen, damit ich das auch mal so gut schreiben kann wie du.

Wie würdest du das noch lösen, damit die Seite in welcher das Sciprt angeziegt wird, selber nicht als Linktip unten angezeigt wird? Die Links haben alle eine id und am besten wäre es die Id der Seite zu vergelichen und nicht zuzulassen. Tja wie man das aber jetzt schreibt ist eine andere Frage?
 
PHP:
<?php
    $linkID=2; // <- Die ID sollte im Skript bekannt sein
    $res = mysql_db_query("DB007",
        "SELECT * FROM links WHERE MATCH name AGAINST ('$tit') "
        ."AND ID != ".$linkID); 
    //der Rest, wie gehabt
//
Alternativ:
PHP:
<?php
    $eigeneURL='http://...php'; // <- Die eigene URL sollte 
                                //    im Skript bekannt sein
    $res = mysql_db_query("DB007",
        "SELECT * FROM links WHERE MATCH name AGAINST ('$tit') "
        ."AND URL != '".$eigeneURL."'"); 
    //der Rest, wie gehabt
//
Gruß hpvw
 
Hallo, dein Beispiel funktioniert, aber ich habe noch zwei Fragen:

1. Warum schreibst du bzw. warum wird die Abfrage so geschrieben, ich habe im galileo openbook MySQL Tutorial gelernt, dass man bei PHP mysql Abragen, erstens die SOL Befehle auch ruhig klein schreiben kann, und das die Abfrage anfängt und aufhört in Anführungsstrichen, in deinem Beispiel wird die Abfrage bis zum ('$tit') auch mit einem Anführungsstrich geschlossen, dann aber kommt ein Punkt und nochmal zwei Anführungsstriche und der rest halt wie folgt:
PHP:
."AND ID != ".$linkID);

Ich verstehe diesen Teil nicht, er funktioniert aber und gerne würde ich das nachvollziehen können.

2. Das Beispiel funktioniert aber scheint sehr aufwendig zu sein, weil ich die Variabale id erst selber schreiben muss, um sie verwenden zu können, ich will aber gerne direkt auf die id aus der Tabelle zugreifen mit hilfe der Abfrage, ohne immer manuell eine Variable mit der id schreiben zu müssen, verstehst du?
 
son gohan hat gesagt.:
dass man bei PHP mysql Abragen, erstens die SOL Befehle auch ruhig klein schreiben kann
Das kann man auch. Ich habe mir jedoch angewöhnt, sämtliche SQL-Schlüsselwörter und Funktionen groß zu schreiben, damit ich sofort erkenne, ob es sich um ein Datenelement (Feld, Tabelle, Alias) oder einen SQL-Begriff handelt.

son gohan hat gesagt.:
, und das die Abfrage anfängt und aufhört in Anführungsstrichen, in deinem Beispiel wird die Abfrage bis zum ('$tit') auch mit einem Anführungsstrich geschlossen, dann aber kommt ein Punkt und nochmal zwei Anführungsstriche und der rest halt wie folgt:
PHP:
."AND ID != ".$linkID);
Bei dem Punkt handelt es sich um den Verkettungsoperator für Strings. Auch das habe ich mir für die Übersicht angwöhnt. Bei passendem Syntaxhighlighting erkennt man sofort, an welcher Stelle eine Variable in den String kommt. Außerdem können viele andere Programmiersprachen keine Variablen direkt im String verwenden. So muß ich nicht dauernd umdenken.

son gohan hat gesagt.:
2. Das Beispiel funktioniert aber scheint sehr aufwendig zu sein, weil ich die Variabale id erst selber schreiben muss, um sie verwenden zu können, ich will aber gerne direkt auf die id aus der Tabelle zugreifen mit hilfe der Abfrage, ohne immer manuell eine Variable mit der id schreiben zu müssen, verstehst du?
Ich glaube, ich verstehe was Du meinst. Die Datenbank hat jedoch keine Möglichkeit herauszufinden, welche URL aufgerufen wurde. Du könntest evtl. auch mit $_SERVER['PHP_SELF'] das aktuelle Skript herausfinden, aber nicht direkt die aufgerufene URL.

Gruß hpvw
 
Ich glaube, ich verstehe was Du meinst. Die Datenbank hat jedoch keine Möglichkeit herauszufinden, welche URL aufgerufen wurde.

Hat die Datenbank auch keine Möglichkeit heruaszufinden welche ID aufgerufen wurde?

Jede Seite bei mir ist ja in der Tabelle mit ID gespeichert.
Oder ist das das gleiche? :)
 
Und woher weiß Dein Skript, welche Seite angezeigt werden soll? Vermutlich doch durch eine übergebene Variable? Diese könntest Du dann auch im Query verwenden. Das wäre eine Möglichkeit von
hpvw hat gesagt.:
Die ID sollte im Skript bekannt sein
Gruß hpvw
 
Ja, das ist wohl das Problem, ich muss dem Script immer irgendwie die ID übergeben, das ich dazu jetzt in jede Seite, die id als Variable selbst rein schreiben muss, hatte ich mir eigentlich gedacht sparen zu können, aber es geht wohl nicht anders.

Alos danke nochmal für die Hilfe.
 

Neue Beiträge

Zurück