kostenloser Webspace werbefrei: lima-city


INNER JOIN Verständnisproblem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    gatheringxp

    gatheringxp hat kostenlosen Webspace.

    Hey community :)

    $sql = "SELECT * FROM goods INNER JOIN user ON goods.user_id = user.id AND needed = '0'";
    $result = $db_link->query($sql);
    
    while($row = $result->fetch_assoc()){
        echo $row["id"];
    }


    Dieser Code gibt die Nutzer-ID aus, nicht die Güter-ID .. Dabei wähle ich doch alles aus "goods" und joine die restlichen Daten nur hinzu. Da müsste doch die ID von goods eine höhere Priorität haben?

    Wie löse ich dieses Problem und schaffe es, dass mit dem echo die ID der Tabelle goods und nicht die der Tabelle user ausgegeben wird?

    Vielen Dank für jede Hilfe im Voraus! :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.

    Deine Logik stimmt. Aber wenn du andersrum denkst, wird zuerst die Güter-ID mit dem Namen id geschrieben und danach wird die id mit der Nutzer-ID überschrieben.

    Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
    as
    arbeitest.

    Zum Beispiel:
    SELECT *, `user`.`id` AS `user_id`, `goods`.`id` AS `good_id`
    FROM `goods `
    INNER JOIN `user `
    ON `goods`.`user_id` = `user`.`id`
    AND needed = '0';


    Beitrag zuletzt geändert: 11.6.2013 22:56:29 von fabi755
  4. fabi755 schrieb:
    Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.

    Deine Logik stimmt. Aber wenn du andersrum denkst, wird zuerst die Güter-ID mit dem Namen id geschrieben und danach wird die id mit der Nutzer-ID überschrieben.

    Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
    as
    arbeitest.


    goods.user_id != user.id
    
    SELECT * FROM goods a INNER JOIN user b ON a.user_id = b.id AND a/b.needed = '0


    je nachdem wo needed ist (denke b.needed) a entfernen

    oder wie bereits erwähnt mit as

    Beitrag zuletzt geändert: 11.6.2013 23:01:23 von n0tiert
  5. Autor dieses Themas

    gatheringxp

    gatheringxp hat kostenlosen Webspace.

    fabi755 schrieb:
    Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.
    [...]
    Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
    as
    arbeitest.


    Korrekt. Lag daran und AS funzt wunderbar. Vielen lieben Dank! :)

    n0tiert schrieb:
    goods.user_id != user.id
    
    SELECT * FROM goods a INNER JOIN user b ON a.user_id = b.id AND a/b.needed = '0


    je nachdem wo needed ist (denke b.needed) a entfernen

    oder wie bereits erwähnt mit as


    Da steig ich nicht so ganz durch .. Ich versuch's nochmal zu verstehen wenn ich wieder aufstehe, aber AS war wie gesagt richtig. Also auch dir vielen Dank! :)
  6. Mit "AS" also "als" gibst du für den Result einen anderen Spalten Name vor.

    AS "Bratwurst" .... AS "Senf" usw.
    das ist sofern wichtig wenn du in beiden Tables z.b. die gleichen Spalten Bezeichner hast wie "ID"
    und diese im Result darstellen willst oder vergleich Operationen benötigst oder ......

    wenn du dann in deinem Script nicht mit $row[0], $row[1]
    (was nicht immer sinnvoll ist das sich das db model ändern kann)
    arbeitest sonder die spalten namen fest sind wie "$row['username']"
    müssen diese gleich dem AS sein und dürfen nicht dem original entsprechen ,
    sonnst fällt dein Script auf die Nase

    Bei meinem Ansatz ändere ich den Result 'username' nicht -> 'Name' ,
    und kann aber trotzdem beide 'username' felder in tabelle 'a" und 'b' ansprechen.

    select a.id , a.username, b.username , c.id ..... 
    FROM  tabelle a , tabelle b, tabelle c  
    WHERE a.username = b.username AND a.id = c.id


    Es muss nicht immer ein "Join" sein :wink:

    select * ist zwar nice aber brauch ich immer alles ?
    muss ich den mit "Select *" username aus"a" und "b" AS "usrname" doppelt haben ?
    und fasse die $row['usrname'] im Script dann gar nicht erst an ?
    ein generelles Faulheit´s Problem :-(

    beim testen OK, nur später in Produktion sollten nur die spalten abgefragt
    werden die ich auch nur benötige......
    macht das ganze schlanker und performanter ...


    Beitrag zuletzt geändert: 15.6.2013 9:40:28 von n0tiert
  7. Autor dieses Themas

    gatheringxp

    gatheringxp hat kostenlosen Webspace.

    Okay, danke .. Werde ich fortan beachten :)
    Hoffe ja immernoch, dass meine Projekte groß werden und dann ist Performance wirklich relevant.

    Aber Joins finde ich dann doch irgendwie ganz gut ^^
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!