SQL --- Auslesen?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Mr.Clear, 11. Januar 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 11. Januar 2006
    Hi Partypeople =)

    Hab folgendes problem:

    Hab ne Tabbelle mit:
    z.B.
    ID---Bereich----Link----
    1##Fun####Link1###
    2##Fun####Link2###
    3##Info####Link1###
    4##Anderes#Link1###
    5##Info####Link1###
    6##Fun####Link3###

    mit welchen schleifen und welchen Befehlen schaff ich es,
    dass er nun folgendes ausgibt:
    ###Bereich = Fun ####
    Link 1
    Link 2
    Link 3
    ###Bereich = Info ####
    Link 1
    usw.....

    Mein bisherigfer Versuch sah so aus:
    Code:
    <?php 
    /* Die Tabelle in der jeweilige Link eingefügt wird, heißt 'Links',
     jeder Link wird noch einem Bereich zugeordnet*/
    
     $sql = "SELECT
     Bereich
     FROM
     Links
     ORDER BY 
     Bereich DESC";
     $result = mysql_query($sql) OR die(mysql_error());
     if(mysql_num_rows($result)) {
     while($row = mysql_fetch_assoc($result)) { 
     echo $row['Bereich'] . ":<br>";
     $sql2 = "SELECT
     Link 
     FROM
     Links
     WHERE
     Bereich = '$row['Bereich']
     ORDER BY
     Link ASC"; 
     $result2 = mysql_query($sql2) OR die(mysql_error());
     if(mysql_num_rows($result2)) {
     while($row2 = mysql_fetch_assoc($result2)) {
     echo $row['Link'];
    ?>
    
    is das so zu umständlich oder korrekt?
    aber dabei wird bei jeder Tabbellenzeile wieder der gesamte
    Bereich ausgegeben, dadurch mehrfach...
    Ich will aber dass er den ersten Bereich z.B. Fun ausgibt,
    danach den nächsten Bereich mit den Links,
    und nicht nochmal danach wieder zb Fun...

    Wie geht das?
    Also wenn ergebnises eines sqls mehrmals vorhanden sind, nur einmal speichern? oder so...

    mfg
     

  2. Anzeige
  3. #2 12. Januar 2006
    Mh mach in die SQL Abfrage statt "ORDER BY.." -> "WHERE $bereich = "namevombereich"
     
  4. #3 12. Januar 2006
    meine "printlinks" funktion:

    function PrintLinks($cat,$prefix){
    $send = "SELECT * FROM ndw4_underlinks";
    $result = mysql_query($send,$GLOBALS['MySQL_ConnID']);
    while($content = mysql_fetch_object($result)){
    if($content->category==$cat){
    if($cat=="3" || $cat=="4"){
    echo '<a href="'.$content->url.'">'.$content->urlname.$prefix.'</a>'."<br>";
    }else{
    echo '<a href="'.$content->url.'">'.$prefix.$content->urlname.'</a>'."<br>";
    }
    }
    }
    }

    $cat steht hier für die kategorie (also z.b. 1 für links, 2 für fun, 3 für clan etc.) und mit prefix kann man noch was for den mysql inhalt schreiben (also z.b. ein >>), ist aber nicht zwingend nötig :D

    ich hoffe, es ist hilfreich :D

    edit: ich glaube nicht, dass es an order by liegt
     
  5. #4 12. Januar 2006
    Ok, also ich kapier die funktion noch net ganz,
    des kommt aber noch *g*

    aber so wie ich das seh, wenn du sagst, dass cat ne kategorie dastellt,
    dann muss ich ja welche ausgegeben werden, wie zb im beispiel 3 und 4, extra hinschreiben...

    Ich will ja letzendlich bewirken, dass man einfach auf
    "Kategorie hinzufügen" drückt, und diese dann nen Namen gibt,
    und auch mit aufgelistet wird und ich nicht auch noch $cat == 5 eingeben muss.

    Aber vllt hab ich das ez falsch gedeutet.
    Aber danke fürs script, 10er ;)

    Gibt es kein SQL Befehl, der nach unterschiedlichen werte in einer spalte sucht? Also nur verschiedene Werte sammelt und die doppelten zusammenfasst? das würde genügen.. :)
     
  6. #5 12. Januar 2006
    thx 4 10er :D

    zum problem (ne ausführliche erklärung der funktion):

    Code:
    function PrintLinks($cat,$prefix){
    $send = "SELECT * FROM ndw4_underlinks";
    $result = mysql_query($send,$GLOBALS['MySQL_ConnID']);
    while($content = mysql_fetch_object($result)){
    if($content->category==$cat){
    if($cat=="3" || $cat=="4"){
    echo '<a href="'.$content->url.'">'.$content->urlname.$prefix.'</a>'."<br>";
    }else{
    echo '<a href="'.$content->url.'">'.$prefix.$content->urlname.'</a>'."<br>";
    }
    }
    }
    }
    
    function PrintLinks($cat,$prefix){
    $cat steht für kategorie (somit kann man das ganze eben ordnen, man kann das $cat auch weglassen, wenn man nur eine sektion haben will) also beispiel:

    ##Fun-Section## (Kategorie nr. 1)
    ->asd (Link)
    ->asd (Link)
    ->asd (Link)

    d.h. in der mysql datenbank müssen praktisch diese sachen gespeichert werden:

    Kategorie, URL, Linkdescription (also wie der link heißen soll)

    und nun als beispiel:

    1, Yahoo Deutschland, Yahoo


    $send = "SELECT * FROM ndw4_underlinks";
    der string für den kompletten inhalt von der tabelle "ndw4_underlinks"

    $result = mysql_query($send,$GLOBALS['MySQL_ConnID']);
    hier wird dann das ganze zeug in die variable "geladen" ( $GLOBALS['MySQL_ConnID'] steht hier für ne globale variable, da ich mehrere files/functions habe, kannste praktisch ignorieren)

    while($content = mysql_fetch_object($result)){

    so, hier wird dann 1. der inhalt EINES eintrages in $content gespeichert und das wird so oft wiederholt, bis kein inhalt mehr da ist

    if($content->category==$cat){

    hier wird aus der tabelle "ndw4_underlinks", gespeichert in der PHP variable $content die untertabelle (oder wie das heißt ^^) category ausgelesen. wenn jetzt die kategorie gleich der angegeben kat. der funktion ist (was oben definiert wurde), dann wird weitergegangen

    if($cat=="3" || $cat=="4"){

    das ist rein aus stylegründen, denn bei mir ist cat. 1+2 links und 3+4 rechts, das kannste also einfach ignorieren


    echo '<a href="'.$content->url.'">'.$content->urlname.$prefix.'</a>'."<br>";

    echo dürfte dir ja was sagen, genauso wie a href :D
    jetzt wird aus der tabelle "ndw4_underlinks" (gleiche methode wie oben) die URL und die beschreibung der URL (yahoo beispiel) ausgelesen.
    $prefix ist wieder ein stylezeugs :D, das kannste einfach weglassen

    ich hoffe du blickst jetzt etwas mehr durch :)
     
  7. #6 12. Januar 2006
    boah fett :D

    hast echt net sehr gut erklärt, und sehr ausführlich ;)
    dafür hast dir eig mehr als nur einen 10er verdient :]

    Ok, ic hdenke ich werd das auch so anwenden,
    auch wenn mein Code ähnlich war, aber
    deiner scheint au gut zu sein :) :)

    Nun noch einmal bevor ich close die frage:
    Wenn ich durch SELECT bestimmte Tabellenzellen auslese,
    durch welchen Code kann ich erlangen, dass jeder
    Wert im Array $content nur einmal vorkommt?
     
  8. #7 13. Januar 2006
    hm verstehe deine frage nicht so ganz, mit select wird jeder wert einer tabelle nur einmal in den array gespeichert!

    also halt:
    $send = "SELECT * FROM ndw4_underlinks";
    nimmt eben alles von der tabelle ndw4_underlinks, aber jeden inhalt nur einmal, und dann gehst du mit while{} den array durch (und jeder wert kommt nur einmal vor)
    ich glaube dein fehler liegt irgendwo hier: $row['Bereich']
    ich glaube, dass dort eben alles ausgelesen wird, bin mir aber nicht sicher! aber ich würde als PHP progger sowieso die $content->irgendwas methode bevorzugen!

    ich hoffe, deine frage beantwortet zu haben :D
     
  9. #8 13. Januar 2006
    Um zu überprüfen ob ein Wert schon im Array vorhanden is, würd ich das einfach so machen:

    Code:
    if(in_array( $wert, $array ) // $wert und $array müssen natürlich angepasst werden
    {
     ... //was passiert wenns den wert schon gibt(vermutlich gar nix...
    }else{
    array_push( $array, $wert) //auch hier wieder anpassen
    }
    Hoffe ich konnte helfen...


    __________________
    MrX
     
  10. #9 14. Januar 2006
    Danke für deine Hilfe :)
    sowas in der art hab ihc noch zusätzlich gesucht!
    ich probiers ez ma aus ;)
    hast nen 10er !!!

    Mfg :D

    EDIT:

    gibts es aber nicht ne einfachere Lösung?

    $result = mysql_query($sql) OR die(mysql_error());
    $row = mysql_fetch_assoc($result);

    kann man da nicht zb die doppelten "filtern"?

    EDIT2:
    hab ez was mit array_unique() gefunden, sowas suchte ich!
    aber wo bau ich den nun richtig ein?

    Code:
    <?php
    
     $sql = "SELECT
     Bereich
     FROM
     Links
     ORDER BY
     Bereich ASC"; 
     $result = mysql_query($sql) OR die(mysql_error());
     if(mysql_num_rows($result)) {
     
     while($row = mysql_fetch_assoc($result)) {
     echo $row['Bereich'] . '<br>';
     $sql2 = "SELECT
     Linkname,
     ID
     FROM
     Links
     WHERE
     Bereich = '".$row['Bereich']."'
     ORDER BY
     Linkname ASC"; 
     $result2 = mysql_query($sql2) OR die(mysql_error());
     if(mysql_num_rows($result2)) {
     while($row2 = mysql_fetch_assoc($result2)) {
     echo '-->' . $row2['Linkname'] . '<br>';
     }
     }
     }
     }
    
    ?>
    
     

  11. Videos zum Thema
Die Seite wird geladen...