php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.04.2006, 16:09  
Benutzer
 
Registriert seit: 06.09.2004
Beiträge: 92
duerov ist zur Zeit noch ein unbeschriebenes Blatt
Standard INNER JOIN + Suchkriterien + Abfrage

Hallo zusammen!
Aus einer Inventurverwaltung/Artikelverwaltung soll nach verschiedenen
Suchkriterien gesucht werden können. Dafür hab ich mehrere Tabellen.

1) In meiner Haupttabelle a stehen die meisten Datensätze einfach in Form von Strings.
Also z.B. bei Modell --> FX60 oder Seriennummer --> 4323
2) Allerdings stehen bei manchen auch nur Zahlen (ID`s), die entsprechenden Bezeichnungen
finden sich dann in anderen Tabellen.
Bei mir stehen in den Tabelle b und c die entsprechenden Bezeichnungen (z.B. ID: 5 -->Bezeichnung: Computer)
für die in Tabelle a eingetragenen ID`s (also a.hop_ID = b.ID und a.hup_ID = c.ID)
3) Wenn ich mir alle Daten ausgeben lassen will mach ich das so:
PHP-Code:
   $query_tb_hardwarebestand mysql_query ("
   SELECT e.ID, e.Name, e.Vorname, d.ID, d.Bemerkung, c.hup_Name, c.ID, b.hop_Name, b.ID, a.hop_ID, a.hup_ID, a.Seriennummer, a.Hersteller, a.Modell,
   a.Merkmale, a.StandortID, a.NutzerimotionID
   FROM tb_hardwarebestand AS a INNER JOIN tb_hop AS b
   ON a.hop_ID = b.ID
   INNER JOIN tb_hup AS c ON a.hup_ID = c.ID
   INNER JOIN standorte AS d ON a.StandortID = d.ID
   INNER JOIN nutzerimotion AS e ON a.NutzerimotionID = e.ID"
); 
4) Nun will ich aber eine Suche einbauen, bei der vom User irgendwelche Suchkriterien
eingegeben werden können, und dann nur die relevanten Datensätze ausgegeben werden.

Normal würde ich das wohl so machen, da bekomm ich in meinem Fall aber natürlich nur
die ID`s, nicht aber die zugehörigen Namen:
PHP-Code:
$query_server_sql "SELECT * FROM tb_hardwarebestand WHERE ";
    
    if(
$_POST["hop"] != ""){
        
$query_server_sql.= "hop_ID LIKE '" $_POST["hop"] . "%' ";
    }
    if(
$_POST["Modell"] != ""){
        
$query_server_sql.= "Modell LIKE '" $_POST["Modell"] . "%' ";
    }
    
    if(
$Seriennummer != ""){
        
$query_server_sql.= "AND Seriennummer LIKE '" $Seriennummer "%' ";
    }
    [...] 
Jetzt krieg ichs bloß nicht hin, die beiden Abfragen zu kombinieren.
Weiß da jemand wie man das richtig ineinander wurschteln könnte?

Gruß und Dank im Voraus
duerov


Nochmal der Übersichtlich kein halber meine Tabellen:

Tabelle a --> tb_hardwarebestand
hop_ID
hup_ID
Seriennummer
Modell
Bemerkung
...

Tabelle b --> tb_hop
ID
hop_Name

Tabelle c --> tb_hup
ID
hup_Name

Tabelle d --> standorte
Tabelle e --> nutzerimotion
duerov ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.04.2006, 16:36  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Deine Tabellenstruktur scheint dann aber schon sehr lumpig zu sein, wenn manchmal nichts, manchmal nur IDs und manchmal ganze Artikelnamen drinne stehen.

Am besten nicht flickschustern sondern gleich richtig machen! Die Mühe lohnt sich.
Zergling-new ist offline  
Alt 04.04.2006, 08:42  
Benutzer
 
Registriert seit: 06.09.2004
Beiträge: 92
duerov ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also langsam gehst DU mir auf den Geist. Sobald ein Lösungsansatz dem großen php-Moderator nicht genehm ist wird ohne konstruktive Vorschläge einfach gefordert alles neu zu machen, wie auch immer sich der große Meister die Optimallösung vorstellt. Hallllllloooooooooo, dies ist ein ANFÄNGERforum, da kann es vorkommen, dass nicht die Superlösungsansätze gepostet werden.
Davon abgesehen solltest du die Artikel genau lesen bevor du deinen Senf dazu gibst. Hab nirgends geschrieben dass in einem Feld nichts drin steht. Und wenn wär das auch egal, soll ja mal vorkommen, dass jemand zu einem Artikel keine Bemerkung schreiben will, sprich das Feld ist leer. Desweiteren find ich die Tabellenstruktur nicht so lumpig. Es lassen sich ohne Probleme weitere Haupt- und Unterpunkte in den entsprechenden Tabellen hinzufügen. Und ich denke mein momentanes Problem lässt sich auch lösen.
Und für die Zukunft merk dir, Artikel von "duerov" einfach ignorieren, das spart dir Zeit und uns beiden Nerven. Ach ja, und weil du ja hier die Allmacht besitzt kannst du die dir unwürdige Postings am besten gleich löschen, das ist die einfachste Problemlösung.
duerov ist offline  
Alt 04.04.2006, 11:06  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ach du schon wieder - hatte nicht auf den Nick geachtet.

Hab mir dein Problem mal richtig durchgelesen, mein Posting war selbst
lumpig, hast du Recht, aber bei gewissen Posting-Formaten (5 Tabellen
hingeklatscht, schwammige Beschreibungen, ..) schalt ich ab.

Egal, verstehe dein Problem immernoch nicht, denn worin liegt der
Unterschied zwischen dem Code mit dem du alles ausliest, und dem mit
den zusätzlichen WHERE-Bedingungen?
Ist es denn nur möglich aus der Tabelle tb_hardwarebestand zu wählen?
Dann hast du nämlich deine INNER JOINs sinnloserweise einfach
weggelassen (warum?) und noch zusätzlich Fehler in die Bedingungslogik
eingebaut:

PHP-Code:
<?
if($_POST["hop"] != ""){
  
$query_server_sql.= "hop_ID LIKE '" $_POST["hop"] . "%' ";
}
if(
$_POST["Modell"] != ""){
  
$query_server_sql.= "Modell LIKE '" $_POST["Modell"] . "%' ";
}
if(
$Seriennummer != ""){
  
$query_server_sql.= "AND Seriennummer LIKE '" $Seriennummer "%' ";

?>
Wo ist der Verknüpfungsoperator bzw. wie erkennst du ob er benötigt
wird? Ich würde die Bedingungen in einen Array schreiben und später per
implode(' AND ', $sql) wieder zusammensetzen ^^

Wenn die Suche auch in den anderen Tabellen stattfinden soll, einfach
dort suchen, die IDs selektieren und gesammelt mit deiner
Power-5-INNER-JOINs-Abfrage abfragen, eben mit entsprechender
Abfrage nach den IDs.
Zergling-new ist offline  
Alt 04.04.2006, 12:47  
Benutzer
 
Registriert seit: 06.09.2004
Beiträge: 92
duerov ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, dann versuch ichs nochmal weniger schwammig auszudrücken.
1. Hab eine Tabelle für die Hardwareoberpunkte --> tb_hop
2. Eine Tabelle für die Hardwareunterpunkte --> tb_hup
3. Und eine Tabelle in der alle Datensätze eingetragen werden
(Die ID`s der Hardwareober/-und unterpunkte + ein paar andere Sachen) --> tb_hardwarebestand

Die INNER JOINS die ich oben gepostet hab sind nur für die Verknüpfung zwischen den in
tb_hardwarebestand eingetragenen ID`s und den zugehörigen "Werten" in den Tabellen tb_hop und tb_hup.
Die if-Abfragen klären, ob der User ein Suchkriterium eingegeben hat if($_POST["hop"] != "").
Wenn ja wird an das SELECT nacheinander eine Abfrage nach der Anderen gehängt.
Im Prinzip hätte ich mir das ungefähr so gedacht:
PHP-Code:
$query_suchauswahl_sql mysql_query ("
        SELECT e.ID, e.Name, e.Vorname, d.ID, d.Bemerkung, c.hup_Name, c.ID, b.hop_Name, b.ID, a.hop_ID, a.hup_ID, a.Seriennummer, a.Hersteller, a.Modell,
        a.Merkmale, a.StandortID, a.NutzerimotionID
        FROM tb_hardwarebestand AS a 
        INNER JOIN tb_hop AS b ON a.hop_ID = b.ID
        INNER JOIN tb_hup AS c ON a.hup_ID = c.ID
        INNER JOIN standorte AS d ON a.StandortID = d.ID
        INNER JOIN nutzerimotion AS e ON a.NutzerimotionID = e.ID"
);
                                                                       
// Je nachdem ob die if-Abfrage true/false ist werden weitere Abfragen ans SELECT gehängt
        
if($_POST["hop"] != ""){
            
$query_suchauswahl_sql.= " WHERE a.hop_ID = '" $_POST["hop"] . "'";     // Wenn hop_ID in tb == der durch Auswahl des Users übertragenen ID wird dieses WHERE ans SELECT angehängt
        
}
        if(
$_POST["hup"] != ""){
            
$query_suchauswahl_sql.= " AND a.hup_ID = '" $_POST["hup"] . "' ";
        }
        if(
$_POST["Seriennummer"] != ""){
            
$query_suchauswahl_sql.= " AND a.Seriennummer LIKE '" $_POST["Seriennummer"] . "' ";
        }
[...]
        
$query_suchauswahl mysql_query($query_suchauswahl_sql);

while (
$dsatz mysql_fetch_array($query_suchauswahl))
{
    echo 
"<TR><TD class='content-table'>" $dsatz["b.hop_Name"] . "</TD></TR>";
    echo 
"<TR><TD class='content-table'>" $dsatz["c.hup_Name"] . "</TD>";
    echo 
"<TD class='content-table'>" $dsatz["a.Seriennummer"] . "</TD>";
    [...]
    

Zitat:
Wo ist der Verknüpfungsoperator bzw. wie erkennst du ob er benötigt
wird? Ich würde die Bedingungen in einen Array schreiben und später per
implode(' AND ', $sql) wieder zusammensetzen ^^
Wenn die Suche auch in den anderen Tabellen stattfinden soll, einfach
dort suchen, die IDs selektieren und gesammelt mit deiner
Power-5-INNER-JOINs-Abfrage abfragen, eben mit entsprechender
Abfrage nach den IDs.
Und jetzt schau ich mal, ob ich deinen Vorschlag richtig verstanden hab und umsetzten kann.
Danke einstweilen.
duerov ist offline  
 


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
INNER JOIN, GROUP BY und ... schwer zu erklären abyss Datenbanken 2 15.06.2008 00:55
exkludierender INNER JOIN pepe24 Datenbanken 5 17.12.2007 14:30
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
inner join zeigt gleiche spalten nur 1x Datenbanken 3 22.02.2006 17:11
inner join aus db PHP Tipps 2006 8 22.01.2006 01:23
[Erledigt] Abfrageproblem mit Inner Join Datenbanken 15 29.11.2005 18:17
sql-Abfrage inner join - unerklärliches Problem havok Datenbanken 6 17.10.2005 14:32
* und Inner Join? Paulo Datenbanken 2 27.09.2005 14:26
[Erledigt] INNER JOIN abfrage zusammen stricken Datenbanken 3 04.07.2005 02:21
INNER JOIN mit 4 tabellen ??? Dragon26mFR Datenbanken 5 01.05.2005 18:51
[Erledigt] kleine inner join frage... PHP-Fortgeschrittene 3 02.11.2004 22:02
[Erledigt] inner join Datenbanken 12 23.09.2004 13:22
INNER JOIN Fehler Schaelle Datenbanken 4 27.07.2004 19:12
SQL Abfrage mit join Datenbanken 5 12.07.2004 16:13
SQL Abfrage mit LEFT JOIN -> OK, aber ich komm net weiter PHP-Fortgeschrittene 3 04.06.2004 00:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
html suchkriterien verknüpfungsoperator und, \select * from\ \inner join\ on unterschied

Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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.