Ankündigung

Einklappen
Keine Ankündigung bisher.

komplizierte mySQL Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • komplizierte mySQL Abfrage

    Hallo Jungs, habe ein prolem, ich habe 3 tabellen :

    Parametr(Par_NR, Par_ID, Engl_Name, eu_Name)
    Bezug (Par_Nr, SchlagW_Nr)
    Schlag_W (SchlagW_Nr,SchlagW_Name)

    Schlagwörter werden zu Parameter zugewiesen, Parameter können auch mehrere Schlagwörter enthalten also N:M beziehung wird durch die Bezug Tabelle realisert. Ich habe volgende abfrage:

    Code:
    SELECT `parameter`.`Par_ID` , 
                `parameter`.`Engl_Name` , 
                `parameter`.`Deu_Name` , 
                `schlagw`.`SchlagW_Name` 
    FROM `parameter` 
    INNER JOIN `bezug` ON ( `parameter`.`Par_Nr` = `bezug`.`Par_Nr` ) INNER JOIN `schlagw` ON ( `bezug`.`SchlagW_Nr` = `schlagw`.`SchlagW_Nr`) 
    WHERE(`schlagw`.`SchlagW_Nr` = 1) OR (`schlagw`.`SchlagW_Nr` = 19)
    Where ist immer unterschiedlich je nachdem wieviele Checkboxen aktiviertwurden. zB es werden Schlagwörter wie UMTS und BSS aktiviert (Chackboxen) dann auf anzeigen, es entsteht dann die abfrage (siehe oben) und es werden nur die Par_ID, Engl_Name, Deu_Name, und Schlaw_Name angezeigt die als Schlagwort UMTS oder BSS haben.
    Jetzt möchte ich die Abfrage erweitern. Es ist so dass Parameter mehrere Shlagwörter haben können, und wenn ein Parameter zB UMTS und BSS als Schlagwort hat, und ich UMTS und BSS markiere und anzeigen lasse, sollen nur die Parameter angezeigt werden die nur UMTS oder BSS haben, und die Parameter die beides haben sollen nicht angezeigt werden.
    Wie soll solche Abfrage aussehen ? Es ist dringend
    Vielen Dank !

  • #2
    Zweck?
    mysql_error()?

    Kommentar


    • #3
      nein, kein error ich möchte die Abfrage erweitern, habe eine Idee: gleiche Bezug Tabelle gleiche par_nr in der Bezug Tabelle sollen nicht ausgegeben werden, wie soll die Abfrage aussehen ?

      Kommentar


      • #4
        Re: komplizierte mySQL Abfrage

        Zitat von Slawa80m
        Es ist so dass Parameter mehrere Shlagwörter haben können, und wenn ein Parameter zB UMTS und BSS als Schlagwort hat, und ich UMTS und BSS markiere und anzeigen lasse, sollen nur die Parameter angezeigt werden die nur UMTS oder BSS haben, und die Parameter die beides haben sollen nicht angezeigt werden.
        a: will mir der Zweck dessen auch nicht ganz kommen ... Das Ergebnis ist am Ende schlicht das gleiche ...

        b: mit einer Abfrage lässt sich das nicht machen (wenn du nicht gerade ein völlig hirnrissiges WHERE-Statemant bauen willst):

        Kommentar


        • #5
          Code:
          SELECT `parameter`.`Par_ID` ,
                      `parameter`.`Engl_Name` ,
                      ...
          INNER JOIN ...
          ...
          WHERE(`schlagw`.`SchlagW_Nr` = 1) XOR (`schlagw`.`SchlagW_Nr` = 19)
          Gruss
          L

          Kommentar


          • #6
            Hallo,

            wenn Du UMTS und BSS mit checkboxen abfragen lassen willst, so würde ich Dir empfehlen, dafür Variablen einzusetzen, die Du nachher wunderbar in der where-Klausel übernehmen kannst... so weißt Du immer, was der Anwender ausgewählt hat und bei der mysql-Abfrage kommt auch das richtige Ergebnis raus.

            Ist der Code mit den checkboxen vorhanden?

            kamalo

            Kommentar


            • #7
              hier ist mein Code ist eine komplizierte geschichte )) also dadurch das die Schlagwörter sich ständig verändern, werden die Chackboxen automatisch generiert, es wird die Anzahl und die Namen der Schlagwörter ausgelesen und damit werden die Chackboxe erstellt, wenn eine oder mehrere Chackboxe markiert werden werden aus deren Namen mySQL abfrage VERVOLLSTÄNDIGT kommt am ende noch zB dass dazu
              Code:
              WHERE(`schlagw`.`SchlagW_Nr` = 5)
              und dass ist der ganze code :

              Code:
              <?
              
              $db_handle = mysql_connect("localhost","","")
              	or die ("
              
               Keine Verbindung möglich: 
              [i]" .mysql_error());
              ("Verbindung erfolgreich!");
               "
              
              \n";
              
              $erfolg = mysql_select_db ("kompendium")
              	or die ("Angegebene Datenbank nicht vorhanden!
              [i]" .mysql_error());
              
              
              $sql_string = "SELECT
              	                  `parameter`.`Par_ID` ,
              	                  `parameter`.`Engl_Name` ,
              	                  `parameter`.`Deu_Name` ,
                                    `schlagw`.`SchlagW_Name`
              
                            FROM
              	                  `parameter`
              
                             INNER JOIN `bezug` ON ( `parameter`.`Par_Nr` = `bezug`.`Par_Nr` )
                             INNER JOIN `schlagw` ON ( `bezug`.`SchlagW_Nr` = `schlagw`.`SchlagW_Nr`)";
              
              $attrs = $_GET['attributes'];
              if (!is_array($attrs))
                 {
                  $attrs = array();
                 }
              
              
              function make_checkboxes($name, $querry, $options)           // ('Attributes', attrs, personality_attributes)
              {
                  echo "<table><tr>";
                  foreach($options as $value => $label)                   //Array wird ausgelesen, einzelne Werte werden nacheinander in $value gespeichert
                  {
                    echo "<td>";
                    echo "</td>";
                    echo ("<td width= \"200\" class=\"Check\">"); printf ('<input type="checkbox" name="%s[]" value="%s"',$name, $value);
                    if (in_array($value,$querry))                //$value ist ein suchbegriff was in $querry gesucht wird, bei erfolg -> TRUE
                    {
                     echo "checked";
                    }
                    echo ">$label</td>";
                    $r++;
                    if ($r==4) {$r=0; echo "</tr><tr>";}         // für die Ausgabe in der Tabelle;
              
                  }
                  echo "</table>";
              }
              
              
              
              $query2 = mysql_query("SELECT * FROM schlagw");    //
              $anzahl = mysql_num_rows($query2);                 //
                                                                 //
              for ($i=0;$i<$anzahl; $i++)                        //  Die Werte werden aus der Datenbank ausgelesen
              {                                                  //  und ein Assoziatives Array wird erstellt.
               $x = mysql_fetch_row($query2);                    //
               $a = "`schlagw`.`SchlagW_Nr` = $x[0]";            //
               $personality_attributes["$a"] = "$x[1]";          //  zB array(`schlagw`.`SchlagW_Nr` = 1"  => "UMTS",  .... );
              }
              
              
              ?>
              
              <form action="db.php" method="GET">
              
              <?
                make_checkboxes('attributes', $attrs, $personality_attributes);
              ?>
              <input type="hidden" name="var" value="parameter">                        
              
              
              
              <input type="submit" name="s" value="Anzeigen" />
              
              <?
              	if (array_key_exists('s', $_GET)) // es wird geprüft ob ein Element in einem Array existiert zB if (array_key_exists (schlüssel,array)){...}
                     {
                      $descrpiption = join ( ") OR (", $_GET['attributes']); //verbindet zu einem String
              	    $sql_string = $sql_string." WHERE(".$descrpiption.")";
                      //$sql_string = $sql_string." WHERE(`bezug`.`Par_Nr`  != `bezug`.`Par_Nr` );
                     }
              
              switch ($SelectiveKey)
                     {
              	    case 'Dok.-Ref': $sql_string = ($sql_string."ORDER BY `parameter`.`Par_Nr`");
                      break;
              	    case 'Englischer Name': $sql_string = ($sql_string."ORDER BY `parameter`.`Engl_Name`");
                      break;
              	    case 'Deutscher Name': $sql_string = ($sql_string."ORDER BY `parameter`.`Deu_Name`");
                      break;
              	    case 'Schlagwort': $sql_string = ($sql_string."ORDER BY `schlagw`.`SchlagW_Name`");
                      break;
                     }
              
              $query = mysql_query($sql_string,$db_handle);
              
              
              $zeilen = mysql_num_rows ($query);
              $fields = mysql_num_fields($query);
              
              //echo ($_SERVER['QUERY_STRING']);
              echo  ("
              ".$sql_string);
              
              echo "
              
              <table class=\"rundum\">\n
              <tr>\n
              <td class=\"navi\"><a href=\"$file_name?$QUERY_STRING&SelectiveKey=Dok.-Ref.\"> Dok.-Ref. </a></td>
              <td class=\"navi\"><a href=\"$file_name?$QUERY_STRING&SelectiveKey=Englischer Name\"> Englischer Name </a></td>
              <td class=\"navi\"><a href=\"$file_name?$QUERY_STRING&SelectiveKey=Deutscher Name\"> Deutscher Name </a></td>
              <td class=\"navi\"><a href=\"$file_name?$QUERY_STRING&SelectiveKey=Schlagwort\"> Schlagwort </a></td>
              </tr>\n\n";
              
              for ($count = 0; $count<$zeilen; $count++)
              {
                 $elemente = mysql_fetch_row ($query);
                 $r = fmod($count, 2);                                         //fmod -- Returns the floating point remainder (modulo) of the division of the arguments
                 echo "<tr CLASS=\"tbody$r\">\n";
              
              	    for ($row = 0; $row<$fields; $row++)
              		{
              		  echo "<td>" .$elemente[$row]. " </td>\n";
              		}
              
                 echo "</tr>\n\n";
              }
              echo "</table>";
              
              mysql_close ($db_handle);
              ?>

              und die abfrage soll erweiter werden, zB wenn ein Parameter UMTS und BSS als Schlagwort hat, und ich UMTS und BSS markiere und anzeigen lasse, werden die gleiche Parameter doppelt angezeigt, es soll aber keine Parameter angezeigt werden die 2 oder mehrere Schlagwörter haben und ich genau die angeklickt habe, in dem fall wo ich UMTS und BSS angeklickt habe sollen die Parameter angezeigt werden die nur UMTS oder nur BSS haben, oder die die UMTS und CallYa haben aber nicht die die genau UMTS und BSS haben kompliziert (([/code]

              Kommentar

              Lädt...
              X