tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
488
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    TheMike TheMike ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    luzern (schweiz)
    Beiträge
    62
    tach ihrser

    also, ich hab folgendes prob:

    ich hab im mysql einerseits ne tabelle mit allen adressen. mit 0- oder 1-werten wird in verschiedenen spalten festgelegt, ob die adresse zu nem kunden, lieferanten, partner oder zu mehreren gehört.

    so weit so gut, ****t auch alles tiptop.

    aber wenn ich in ner zweiten tabelle mit den projekten die verknüpfungen (über id-wert der adress-tabelle) mache, sind ja pro projekt mehrere adressen verknüpft.

    und wenn ich dann die abrage wie gewohnt mache:

    $ergebnis = mysql_query( "SELECT * FROM projekte_gu p, adressen a
    WHERE p.kunde = a.id
    ORDER by $ord $dir " );
    $anz_reihen = mysql_num_rows( $ergebnis );

    for ( $i="0"; $i<$anz_reihen; $i++)
    {
    $id = mysql_result($ergebnis, $i, "p.id");
    $kunde = mysql_result($ergebnis, $i, "a.name");
    usw...
    }

    is das auch ganz nett ... aber weil ich ja mehrere adressen pro projekt habe, wird mit a.name kaum der korrekte gewählt.

    is mein prob einigermassen verständlich?

    wie könnt man das umgehen?

    ich hab mir schon überlegt, bei jedem projekt für den kunden nochmal ne eigene abfrage zu machen ( $ergebnis_projekt = mysql_query( "SELECT * FROM adressen WHERE id = $kunde " ); ), aber dann kann ich die ganze abfrage nicht nach dem kunden oder dem lieferanten sortieren lassen. und das würd ich schon gern.
    oder ich mach pro adress-art (kunden, lieferanten, partner ... ) ne eigene adresstabelle. aber dann müsst ich die auch einzeln verwalten und könnt in ner gesammtübersicht auch net beliebig sortieren.


    thx
     
    HOSSA!

    TheMike

  2. #2
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    eine andere sql abfrage löst das problem:

    SELECT * FROM projekte_gu as p, adressen as a on p.kunde=a.id
    WHERE ...... usw
     

  3. #3
    TheMike TheMike ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    luzern (schweiz)
    Beiträge
    62
    hmm ... mal ganz abgesehen davon, dass bei mir ne fehlermeldung wegen ner ungültigen abfrage kommt, wenn ich das probiere - soweit ich das verstehe, ist damit das prob net gelöst.

    die abfrage ****t ja so wie ichs oben beschrieben hab, aber bei der zuweisung der variablen gibs probleme, weil ich halt mehrer adressen mit dem projekt verknüpft hab und somit auch mehrere a.id's habe ...
     
    HOSSA!

    TheMike

  4. #4
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    und somit auch mehrere a.id's habe ...
    na und

    da wir mit meinem beispiel eine join verbindung haben geht das

    die - on - angabe gibt ja an wie die felder verküpft werden sollen

    on p.kunde=a.id verküpft die felder kunde und id
    auch wenn pro p.kunde viele a.id vorhanden sind geht das ...

    zb die abfrage
    SELECT * FROM projekte_gu as p join adressen as a on p.kunde=a.id
    WHERE p.kunde='1'

    gibt die kundeninformation und die aufträge von der kundenid 1 aus
     

  5. #5
    TheMike TheMike ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    luzern (schweiz)
    Beiträge
    62
    jepp ... dat is schon klar ... aber ... *malaushol* ...

    in jedem projekt hab ich halt neben dem kunden auch nen lieferanten, nen auftraggeber usw verknüpft - und alle aus der selben adress-tabelle.

    neben dem p.kunde hab ich also noch p.lieferant, p.auftraggeber usw ...

    und somit hab ich für all diese daten ne unterschiedliche a.id ...
    wie kann ich da nun die richtige zuordnen bei:

    $kunde = mysql_result($ergebnis, $i, "a.name");
     
    HOSSA!

    TheMike

  6. #6
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    nu gut...

    auch mal weit aushol

    so wie es verstanden habe hast du ne projekt tabelle mit kundenid, liferantenid und auftragid

    dann muss man natürlich alle idfelder mit der adressid verknüpfen

    select * from projekt as p left join adresse as k on p.kunde=k.id left join adresse as l on p.liefer=l.id left join auftrag as a on p.auftrag=a.id
     

  7. #7
    TheMike TheMike ist offline Mitglied Silber
    Registriert seit
    May 2002
    Ort
    luzern (schweiz)
    Beiträge
    62
    goil ... dat ****t

    ich weiss zwar noch net ganz im detail wie und warum - aba es ****t ... und das is mal die hauptsache

    thx a lot
     
    HOSSA!

    TheMike

  8. #8
    Registriert seit
    Jul 2002
    Ort
    Frankfurt (Hessen)
    Beiträge
    2.135
    warum das geht

    nun gut

    tab_a left join tab_b on tab_a.id=tab_b.id

    der left join verküpft die beiden tabellen miteinander und in der on angabe wird angegeben welche felder die beiden tabellen verküpfen

    durch das wörtchen left bleibt die linke tabelle vollständig und nur die datensätze der rechten tabelle die nicht der bedingung entspechen werden entsorgt

    da sql von links nach rechts arbeitet
    muss man gedanklich klammern setzen

    sprich (((a join b) join c) join d) ist ja die kurzversion

    bedeutet erst der join zwischen a und b und das ergebnis wird mit tabelle c verküpft und das ergebnis wieder mit d

    hoffe klarer geworden
     

Ähnliche Themen

  1. Mehrere Uploads in mehreren Datensätzen
    Von Duergy im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 10.01.11, 11:49
  2. JOINs mit mehreren Datensätzen verarbeiten
    Von JOINFRAGENSEPP im Forum PHP
    Antworten: 1
    Letzter Beitrag: 09.09.10, 10:50
  3. Antworten: 5
    Letzter Beitrag: 16.03.10, 12:48
  4. eval() geht nicht bei mehreren Datensätzen
    Von schecker im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 17.11.09, 09:02
  5. Vergleich mit mehreren Datensätzen
    Von MelBib im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 22.09.05, 15:49