Brauche Hilfe bei JOIN Abfrage

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

  • Brauche Hilfe bei JOIN Abfrage

    Nabend,

    trotz längerem Stöberns per Suchmaschine und auf einschlägigen Seiten krieg ich eine eigentlich einfache Abfrage nicht hin

    Als Beispiel:
    Ich möchte alle CDs angezeigt haben, deren Artist-Name mit A beginnt und wo die Kategorie = 1 ist.

    Wenn der Artistname nun in der Tabelle cds stehen würde, wie es bei der Kategoriespalte category der Fall ist, würde ich das so machen:

    SELECT * FROM cds WHERE (artist_name LIKE 'a%') AND category='1';

    Steht er aber nicht, da die Artists in einer extra Tabelle artists stehen
    In cds steht lediglich die id des zugehörigen Artist-Datensatzes.

    Ich hab keinen blassen Schimmer wie ich das nun abfrage. Daß ich beide Tabellen angeben muss ist klar, aber wie, und wie sag ich MySQL, daß er die name - Spalte der artists - Tabelle nehmen soll und nicht die name - Spalte der cds - Tabelle (will ja nicht den CD-Namen)?
    Zuletzt geändert von Lodi; 18.04.2004, 21:17.
    "...vielleicht stehe ich vor dir und du erkennst mich nicht. Spielt das eine Rolle? Wir sah'n ins gleiche Licht..."

  • #2
    LIKE 'a%'
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Re: Brauche Hilfe bei JOIN Abfrage

      Original geschrieben von Lodi
      Nabend,

      trotz längerem Stöberns per Suchmaschine und auf einschlägigen Seiten krieg ich eine eigentlich einfache Abfrage nicht hin

      Als Beispiel:
      Ich möchte alle CDs angezeigt haben, deren Artist-Name mit A beginnt und wo die Kategorie = 1 ist.

      Wenn der Artistname nun in der Tabelle cds stehen würde, wie es bei der Kategoriespalte category der Fall ist, würde ich das so machen:

      SELECT * FROM cds WHERE (artist_name LIKE '$A') AND category='1';

      Steht er aber nicht, da die Artists in einer extra Tabelle artists stehen
      In cds steht lediglich die id des zugehörigen Artist-Datensatzes.

      Ich hab keinen blassen Schimmer wie ich das nun abfrage. Daß ich beide Tabellen angeben muss ist klar, aber wie, und wie sag ich MySQL, daß er die name - Spalte der artists - Tabelle nehmen soll und nicht die name - Spalte der cds - Tabelle (will ja nicht den CD-Namen)?
      zeig mal tabellen struktur !

      EDIT:

      ups.. was hat das mit join zu tun?

      Zuletzt geändert von xManUx; 22.11.2004, 17:35.

      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
      sondern mit den Augen das Manual zu lesen.

      Kommentar


      • #4
        Original geschrieben von Abraxax
        LIKE 'a%'
        Sorry, war ein Schreibfehler hier im Forum. Im PHP-Script stimmts.
        Original geschrieben von xManUx
        ups.. was hat das mit join zu tun?
        Muss man da nix mit JOIN machen? Sieht man mal wieder wie "erfahren" ich in Sachen SQL bin

        Die Struktur der beiden Tabellen:

        CREATE TABLE `cds` (
        `id` int(6) NOT NULL auto_increment,
        `artist_id` int(6) NOT NULL default '0',
        `name` varchar(255) NOT NULL default '',
        `category` int(3) NOT NULL default '0',
        `bild` varchar(255) NOT NULL default '',
        `bemerkung` text NOT NULL,
        PRIMARY KEY (`id`)
        ) TYPE=MyISAM COMMENT='CDs' AUTO_INCREMENT=14 ;

        CREATE TABLE `artists` (
        `id` int(6) NOT NULL auto_increment,
        `name` varchar(255) NOT NULL default '',
        `bemerkung` text NOT NULL,
        PRIMARY KEY (`id`)
        ) TYPE=MyISAM COMMENT='Artists' AUTO_INCREMENT=13 ;

        EDIT:
        Bei 'cds' fehlte die Spalte 'category':
        Aus Versehn mit entfernt, als ich die bei diesem Problem unbenötigten Spalten rausgehauen hab (die später wieder reinkommen) ... wollt's nur übersichtlicher machen, und hab das Gegenteil erreicht
        Danke für die Vorschläge weiter unten, probiere ich aus!

        Zuletzt geändert von Lodi; 19.04.2004, 20:16.
        "...vielleicht stehe ich vor dir und du erkennst mich nicht. Spielt das eine Rolle? Wir sah'n ins gleiche Licht..."

        Kommentar


        • #5
          SELECT cd.*, artist.name as artist_name FROM cds cd, artists artist WHERE artist.name LIKE '$a%' AND cd.artist_id = artists.id AND cd.category='1'

          So oder so ähnlich könnte deine Abfrage aussehen!
          Ist jetzt nirgendwo das wörtchen JOIN drinne - aber du hast damit den selben effekt!

          ich habe mit dem Teil
          --> FROM cds cd, artists artist
          festgelegt, aus welchen Tabellen die Daten geholt werden sollen.

          mit
          --> SELECT cd.*, artist.name as artist_name
          habe ich festgelegt, dass er aus der tabelle cd [=> cds] alles holen soll und den artistennamen soll er als arist_name aus der tabelle arist [=>artists] holen

          ansonsten dahinterh ab ich einfach deine BEdingungen geschrieben

          das ganze müsste so funktionieren

          Edit:
          Ich sehe gerade, dass du in deinen beiden tables kein category-feld hast! Aber das das dann nicht geht - darauf wirst du schon selber kommen denke ich
          C-Ya Toby

          Kommentar


          • #6

            wenn ich dich richtig verstanden habe, probier mal das !

            Code:
            $variable = "a%";
            
            SELECT
                       b.id AS ID_1,
                       b.artist_id,
                       b.name,
                       b.bild,
                       b.bemerkung,
                       a.id AS ID_2,
                       a.name,
                       a.bemerkung
            FROM
                       artists a
            LEFT JOIN
                       cds b
                   ON
                       a.id=b.artist_id
            WHERE
                     ( LIKE a.name = '$variable')

            außerdem, was machst mit categories, wenn du diese nicht in der db hast!?
            Zuletzt geändert von xManUx; 18.04.2004, 22:19.

            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
            sondern mit den Augen das Manual zu lesen.

            Kommentar


            • #7
              Vielen Dank an euch beide!
              Habe TobyM's Vorschlag benutzt, und der funzt wunderbar! Hast das ganze noch klasse erklärt, beim nächsten Mal krieg ich was vergleichbares sicher selber hin

              Ich hab das ganze jetzt sogar noch ein bißchen erweitert, daß er mir aus ner Tabelle "labels" noch den Labelnamen der CD rauszieht und mit ausgibt.

              Eure Beispiele haben mir echt den passenden Denkanstoss gegeben
              "...vielleicht stehe ich vor dir und du erkennst mich nicht. Spielt das eine Rolle? Wir sah'n ins gleiche Licht..."

              Kommentar

              Lädt...
              X