php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.06.2004, 17:38  
Gast
 
Beiträge: n/a
Standard 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 !
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.06.2004, 18:43  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 529
DutziMan befindet sich auf einem aufstrebenden Ast
Standard

Zweck?
mysql_error()?
DutziMan ist offline   Mit Zitat antworten
Alt 21.06.2004, 18:51  
Gast
 
Beiträge: n/a
Standard

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 ?
  Mit Zitat antworten
Alt 21.06.2004, 19:25  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard Re: komplizierte mySQL Abfrage

Zitat:
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):
Guradia ist offline   Mit Zitat antworten
Alt 22.06.2004, 08:49  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Code:
SELECT `parameter`.`Par_ID` ,
            `parameter`.`Engl_Name` ,
            ...
INNER JOIN ...
...
WHERE(`schlagw`.`SchlagW_Nr` = 1) XOR (`schlagw`.`SchlagW_Nr` = 19)
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 22.06.2004, 11:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 146
Hakima befindet sich auf einem aufstrebenden Ast
Standard

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
Hakima ist offline   Mit Zitat antworten
Alt 25.06.2004, 15:34  
Gast
 
Beiträge: n/a
Standard

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]
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySql Frage: Problem mit einer etwas lomplexeren Abfrage tomtaz Datenbanken 5 24.06.2008 22:36
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
MySQL Abfrage von Ver. 5 für Ver 3. des MySQL Servers FireFIghter Datenbanken 3 02.02.2007 17:18
MySQL Abfrage macht Seite langsam Datenbanken 11 19.10.2006 19:38
MySQL - Abfrage: Unterschiedliche Ergebnisse aus PHP/manuell horstenpeter Datenbanken 3 16.07.2006 13:22
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
mysql abfrage mqs PHP Tipps 2006 4 09.04.2006 17:57
Abfrage bei mySQL 4 ApfeL Datenbanken 5 24.03.2006 18:53
komplizierte mysql abfrage php_frage PHP Tipps 2007 5 28.12.2005 17:55
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MySQL Abfrage Problem. web2 PHP Tipps 2005-2 7 25.07.2005 11:07
Mysql Abfrage Datenbanken 4 27.02.2005 22:26
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
[Erledigt] mysql Abfrage Datenbanken 5 18.06.2004 14:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
komplizierte mysql abfrage, komplizierte mysql abfragen, http://www.php.de/datenbanken/3421-erledigt-komplizierte-mysql-abfrage.html, mysql checkbox abfragen, mysql schlagwort, komplizierte mysql-abfrage, php mysql query parameters, mysql abfrage mit 3 inner joins langsam, php mehrere mysql-abfragen in einem query, komplexe mysql abfrage mit case, mysql selective where klausel, mysql hilfe abfrage n:m, mysql schlagwort und oder, mysql \mehrere schlagwörter\, abfrage gleiche tabelle ohne bezug, komplizierte inner joins, mysql komplizierte abfragen, mysql m:n abfrage, php mysql abfrage von 2 table verschachtelt, mysql query mit case erweitern

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.