Werte in einem Array suchen

  • Hallo,


    ich beschäftige mich gerade mit Arrays.

    Habe hierzu eine Frage.


    Ich habe 2 Abfragen

    Code
    $sql = $db->prepare("SELECT id, tiername FROM tiere ORDER BY tiername");
    $sql->execute();
    
    foreach ($sql as $row] {
    echo $row['tiername];
    } 

    Hier sollen alle Werte ausgegeben werden.

    Es gibt aber noch eine zweite Tabelle, in der weitereführende Informationen zu einem Tier angelegt sind. Hierbei ist wichtig, dass es nicht zu jedem Tier weitere Informationen gibt


    Code
    $sql_info = $db->prepare("SELECT id FROM eigenschaften");
    $sql_info->execute();
    $result = $sql_info->fetchAll();


    Ich würde es jetzt gerne umsetzen, dass in der Liste, aus der ersten Abfrage, der Tiername als Link dargestellt wird, wenn das Tier in der Tabelle Eigenschaften vorkommt.


    Folgendes habe ich probiert


    Code
    foreach ($sql as $row] {
    
    if (array_search($row['tiername'], $result)) {
           <a href="info.php?id='.$row['id'].'">'.$row['tiername'].'</a>';
        }
        else {
            $row['tiername'];
        }
    }

    Es erscheint keine Ausgabe als Link, sondern immer nur der Tiername als Text.

    Was mache ich falsch?


    Danke sehr


    Grüße


    Faustus

  • Ja, ich sehe, dass ich nicht auf den Index zugreife.


    Ich müsste wohl noch etwas zusätzlich an $result hängen, sowas wie $result[1] oder so.

    Muss mich da nochmal einlesen.

  • Ja, kann nicht schaden, wenn Du dich in dieser Richtung mit dem Handling von Arrays vertraut machen würdest.

    Allerdings würde ich für eine finale Lösung den Vorschlag von m.scatello weiter verfolgen: Ein Join über beide Tabellen mit der ID verknüpft, dann hast Du gleich alle Informationen in einem Resultset.

  • kann man das nicht mit SQL + SELECT + JOIN machen das nur das ausgegeben

    Glückwunsch! Thread nicht gelesen oder konntest du einfach nicht wiederstehen, auch hier reinzuschreiben?

    Zeige uns bitte die genauen Tabellenstrukturen. Das müsste eigentlich mir einem Select machbar sein.

    Allerdings würde ich für eine finale Lösung den Vorschlag von m.scatello weiter verfolgen: Ein Join über beide Tabellen mit der ID verknüpft, dann hast Du gleich alle Informationen in einem Resultset.

  • Hallo,


    vielen Dank für all die Antworten.


    Die Liste soll komplett ausgegeben werden, unabhängig, ob es weitere Infos gibt, oder nicht.


    Die Tabellenstruktur sieht so aus (stammt nicht von mir)

    tiere

    id int(5) AUTO_INCREMENT

    tiername varchar(40)

    erdat date

    ernam varchar(10)

    activ boolean


    eigenschaften

    id int(5)

    latein varchar(40)

    land varchar(30)

    kontinent varchar(20)

    groesse int(5)

    einheit_gr varchar(3)

    gewicht int(5)

    einheit_ge varchar(3)

    .

    .

    .



    Reicht das euch, oder braucht ihr noch mehr Informationen?


    Danke sehr


    Grüße


    Faustus

  • Ich denke mal wenn id 1 ein Hund ist wird in der anderen Tabelle die Eigenschaften des Hundes auch in id 1 stehen.

    dann wäre das ja einfach mit INNER JOIN .

    Dann

    Es gibt aber noch eine zweite Tabelle, in der weitereführende Informationen zu einem Tier angelegt sind. Hierbei ist wichtig, dass es nicht zu jedem Tier weitere Informationen gibt

    würde das aber nicht klappen.

    Wenn der Hund in Id 1 keine Eigenschaften besitzt ,

    ist in der Eigenschaften ( id 1 ) nur leere Felder oder gar keine Zeile angelegt ?


    Wenn keine müßte in Eigenschaften ( id 1 ) dann Eigenschaften vom Pferd sein oder sonst was ?

  • Hi,


    danke für die Antworten. War über das Wochenende nicht am Rechner, daher eine späte Antwort.


    Die IDs sind wohl immer gleich. Wird in TIERE eine ID eingefügt, wird dies auch so in die andere Tabelle geschrieben. So erkläre ich mir das zumindest, da die IDs nach meiner Prüfung immer so vergeben sind. Leider ist das nicht meine Datenbank bzw. ich darf zum Testen die Daten benutzen.


    Ich habe es jetzt so gemacht, dass immer ein Link erstellt wird. Klickt man darauf, wird man auf die Info Seite geleitet. Dort wird dann geprüft, ob es Zusatzinfos gibt. Wenn ja, werden diese aufgelistet. Wenn es keine Zusatzinfos gibt, wird eine Aufforderung eingeblendet, diese Zusatzinfos zu pflegen.

  • Ich habe es jetzt so gemacht, dass immer ein Link erstellt wird. Klickt man darauf, wird man auf die Info Seite geleitet. Dort wird dann geprüft, ob es Zusatzinfos gibt. Wenn ja, werden diese aufgelistet. Wenn es keine Zusatzinfos gibt, wird eine Aufforderung eingeblendet, diese Zusatzinfos zu pflegen.

    Das ist aber blöd.

    Wenn es keine Info gibt kriegt er nach den klick auf den Link eine leere Seite und keine Infos.

    Das sollte mit einer Zeile Sql gehen.

    Dann bekommst du nur Tiere angezeigt die eine Tier Eigenschaft hat .

    Wenn die Ids gleich sind müßte ja bei den Eigenschaften leere Zeilen sein wenn keine Infos da sind

  • Ein Beispiel:

  • Aufgegeben habe ich nicht. Ich musste nur etwas machen.

    Bin jetzt aus dem Urlaub zurück und setze mich nochmal dran. Ich gucke mir das später nochmal an.

    Schon mal vielen Dank für eure Antworten.

Jetzt mitmachen!

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