Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Jointabelle gibt mir nicht aus was ich möchte

Einklappen

Neue Werbung 2019

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

  • Michael17
    hat ein Thema erstellt [Erledigt] Jointabelle gibt mir nicht aus was ich möchte.

    [Erledigt] Jointabelle gibt mir nicht aus was ich möchte

    Hallo zusammen,
    ich habe da ein kleines Problem

    folgendes: wie bekomme ich es hin, das ich eine Ausgabe aus der Tabelle hmfachgebiet bekomme,
    die mir alles ausgibt außer es befindet sich der username in zusammenhang mit der fachgebiet_id in der Tabelle ?

    Ich habe 2 Tabellen

    die Tabelle fachgebietenliste beinhaltet
    fachgebiet_id und
    fachgebiet

    die zweite Tabelle hmfachgebiet beinhaltet
    fachgebiet_id
    hmfachgebiet und
    uername

    mein Versuch sieht so aus
    Code:
    SELECT
    		                a.*,
    				b.*
    			FROM
    				fachgebietenliste AS a LEFT OUTER
    			JOIN
    				hmfachgebiet AS b
    			ON
    				a.fachgebiet_id != b.fachgebiet_id
    
    			WHERE
    				b.username  != '$name'
    aber... da bekomme ich alles ausgeliefert sofern gar kein Username vorhanden ist, es befindet sich aber zur Zeit einen Namen in der hmfachgebiet Liste der aber nicht $name entspricht.

    für freundliche Unterstüzung bedanke ich mich im Voraus

  • Michael17
    antwortet
    Zitat von erc Beitrag anzeigen
    Der erste Schritt ist das Problem präzise zu formulieren. Das was du da schreibst ist das:

    PHP-Code:
    SELECT FROM hmfachgebiet WHERE username  != '$name' 
    Das was du ̶w̶̶a̶̶h̶̶r̶̶s̶̶c̶̶h̶̶l̶̶i̶̶c̶̶h̶̶ willst ist das:

    PHP-Code:
    SELECT
        
    *
    FROM
        fachgebietenliste a LEFT JOIN
        hmfachgebiete b ON 
    (a.fachgebiet_id b.fachgebiet_id AND b.username '$name')
    WHERE
        b
    .fachgebiet_id IS NULL 
    *edit* ̶w̶̶a̶̶h̶̶r̶̶s̶̶c̶̶h̶̶l̶̶i̶̶c̶̶h̶̶
    wäre der Schreibfehler nicht gewesen, hätte es geklappt
    so geht es letztentlich mit dem auslesen
    Code:
    SELECT
        		*,
        		a.fachgebiet_id
    		FROM
        		fachgebietenliste a LEFT JOIN
        		hmfachgebiet b ON (a.fachgebiet_id = b.fachgebiet_id AND b.username = '$name')
    		WHERE
        		b.fachgebiet_id IS NULL
    aber die Tabellen habe ich auch noch bereinigt


    Allen recht herzlichen Dank für die Hilfe und Unterstützung
    Jetzt hat sich ein neues problem aber dazu mache ich lieber ein neues Thread auf

    Einen Kommentar schreiben:


  • Michael17
    antwortet
    Zitat von Spamversender Beitrag anzeigen
    Foreign Key heißt Fremdschlüssel. Der ist ähnlich wie ein Primary Key zu definieren, aber ich benutze diese Möglichkeit nie weil sie mMn nichts bringt. Das heißt nur, dass in deinem Fall die Spalte fachgebiet_id der Tab. hmfachgebiet mit der Spalte id der Tab. fachgebiet Verknüpft ist. Wenn also in hmfachgebiet als fachgebiet_id 3 steht, dann schaust du bei fachgebiet dort wo die ID 3 ist und hast den Namen des Fachgebiets

    B2T: Stell dir mal vor, du hast immer das Fachgebiet Elektronik verwendet, und jetzt möchtest du dass es Elektrizität heißt. Also müsstest du in 2 Tabellen ads ändern. Stell dir vor, du brauchst die Fachgebiete in mehr als 2 Tabellen. Das könnte da schon schwer werden alles zu verändern. Deswegen die Fachgebiete-Tabelle. Dort wird einem Fachgebiet eine ID zugeordnet, und überall wo fachgebiete benötigt werden wird die ID statt der Name verwendet. Einmal den Namen in der Fachgebiete-Tabelle geändert, überall geändert
    Als bis zu dem Punkt hast du vollkommen Recht, ich war auch schon am Überlegen ob ich den Name auch mitübergeben soll... das ändere ich mal gerade ab
    die fachgebiet_id lasse ich für die Übereinstimmung drinne

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von Michael17 Beitrag anzeigen
    Foreign Key sagt mir gerade nichts
    http://www.insidesql.org/blogs/cmu/s...l-foreign-keys

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von Spamversender Beitrag anzeigen
    Foreign Key heißt Fremdschlüssel. Der ist ähnlich wie ein Primary Key zu definieren,
    Nein.

    aber ich benutze diese Möglichkeit nie weil sie mMn nichts bringt.
    Kein Problem, daß Du nur mageres Halbwissen hast. Aber solche Äußerungen solltest Du dann besser lassen.

    Einen Kommentar schreiben:


  • Spamversender
    antwortet
    Foreign Key heißt Fremdschlüssel. Der ist ähnlich wie ein Primary Key zu definieren, aber ich benutze diese Möglichkeit nie weil sie mMn nichts bringt. Das heißt nur, dass in deinem Fall die Spalte fachgebiet_id der Tab. hmfachgebiet mit der Spalte id der Tab. fachgebiet Verknüpft ist. Wenn also in hmfachgebiet als fachgebiet_id 3 steht, dann schaust du bei fachgebiet dort wo die ID 3 ist und hast den Namen des Fachgebiets

    B2T: Stell dir mal vor, du hast immer das Fachgebiet Elektronik verwendet, und jetzt möchtest du dass es Elektrizität heißt. Also müsstest du in 2 Tabellen ads ändern. Stell dir vor, du brauchst die Fachgebiete in mehr als 2 Tabellen. Das könnte da schon schwer werden alles zu verändern. Deswegen die Fachgebiete-Tabelle. Dort wird einem Fachgebiet eine ID zugeordnet, und überall wo fachgebiete benötigt werden wird die ID statt der Name verwendet. Einmal den Namen in der Fachgebiete-Tabelle geändert, überall geändert

    Einen Kommentar schreiben:


  • Michael17
    antwortet
    Zitat von akretschmer Beitrag anzeigen
    Ja, Du bist auf dem richtigen Weg. Wozu dienen die felder

    Code:
    `hmfachgebiet` varchar( 30 ) NOT NULL ,
    `fachgebiet_id` int( 11 ) NOT NULL ,
    Du hast doch eine andere Tabelle dafür, hier brauchst Du nur einen Foreign Key. Wo ist der?




    *seufz*
    Foreign Key sagt mir gerade nichts
    und hmfachgebiet habe ich in reintext nur den Namen des Fachgebietes gespeichert und
    fachgebiet_id braucht man ja um zwei Tabellen miteinander zu verbinden

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von Michael17 Beitrag anzeigen
    meinst du so was ?

    CREATE TABLE `hmfachgebiet` (
    `id` int( 11 ) NOT NULL AUTO_INCREMENT ,
    `hmfachgebiet` varchar( 30 ) NOT NULL ,
    `fachgebiet_id` int( 11 ) NOT NULL ,
    `username` varchar( 20 ) NOT NULL ,
    PRIMARY KEY ( `id` )
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
    Ja, Du bist auf dem richtigen Weg. Wozu dienen die felder

    Code:
    `hmfachgebiet` varchar( 30 ) NOT NULL ,
    `fachgebiet_id` int( 11 ) NOT NULL ,
    Du hast doch eine andere Tabelle dafür, hier brauchst Du nur einen Foreign Key. Wo ist der?


    @Spamversender
    ich habe mal gelöscht, nützt aber nichts
    *seufz*

    Einen Kommentar schreiben:


  • Michael17
    antwortet
    Zitat von akretschmer Beitrag anzeigen
    versuch mal bitte, via create table & insert nachvollziehbare beispiele zu liefern und auch das, was rauskommen soll.
    meinst du so was ?

    CREATE TABLE `hmfachgebiet` (
    `id` int( 11 ) NOT NULL AUTO_INCREMENT ,
    `hmfachgebiet` varchar( 30 ) NOT NULL ,
    `fachgebiet_id` int( 11 ) NOT NULL ,
    `username` varchar( 20 ) NOT NULL ,
    PRIMARY KEY ( `id` )
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8;

    @Spamversender
    ich habe mal gelöscht, nützt aber nichts

    Einen Kommentar schreiben:


  • Spamversender
    antwortet
    Wenn die Namen in für Fachgebiete in beiden Tabellen immer gleich sein sollen, dann die Spalte löschen. Wenn nicht dann nicht

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von Michael17 Beitrag anzeigen

    @akretschmer
    Sorry, ich weiß nicht genau was du möchtest oder benötigst bin ja noch Anfänger
    #3

    Einen Kommentar schreiben:


  • Michael17
    antwortet
    Zitat von Spamversender Beitrag anzeigen
    Bitte erstmal in der Tabelle hmfachgebiet die Spalte "fachgebiet" entfernen, da du das Fachgebiet ja schon über die fachgebiet_id in Verknüpfung mit der Tabelle fachgebiet identifizierst.
    Ist das denn Notwendig die zu löschen?
    Denn ich wollte die Nutzen um später auch über Checkboxen (wegen der Namenbeschreibung) auch über ein Formular zu löschen.

    @akretschmer
    Sorry, ich weiß nicht genau was du möchtest oder benötigst bin ja noch Anfänger

    Einen Kommentar schreiben:


  • Spamversender
    antwortet
    Bitte erstmal in der Tabelle hmfachgebiet die Spalte "fachgebiet" entfernen, da du das Fachgebiet ja schon über die fachgebiet_id in Verknüpfung mit der Tabelle fachgebiet identifizierst.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    Zitat von Michael17 Beitrag anzeigen
    Als beispiel habe ich noch im Anhang die Datenbanken als Bild angefügt
    Das ist nicht was, worum ich Dich bat.

    Einen Kommentar schreiben:


  • Michael17
    antwortet
    Zitat von erc Beitrag anzeigen
    Der erste Schritt ist das Problem präzise zu formulieren. Das was du da schreibst ist das:

    PHP-Code:
    SELECT FROM hmfachgebiet WHERE username  != '$name' 
    Das was du ̶w̶̶a̶̶h̶̶r̶̶s̶̶c̶̶h̶̶l̶̶i̶̶c̶̶h̶̶ willst ist das:

    PHP-Code:
    SELECT
        
    *
    FROM
        fachgebietenliste a LEFT JOIN
        hmfachgebiete b ON 
    (a.fachgebiet_id b.fachgebiet_id AND b.username '$name')
    WHERE
        b
    .fachgebiet_id IS NULL 
    *edit* ̶w̶̶a̶̶h̶̶r̶̶s̶̶c̶̶h̶̶l̶̶i̶̶c̶̶h̶̶
    leider nicht, da bekomme ich

    WarningInvalid argument supplied for foreach()
    Skript: C:\xampp\htdocs\scripts\Hma\classes\class.hma.php Line: 138

    und darin steht

    foreach ($result as $topic)
    {

    Einen Kommentar schreiben:

Lädt...
X