SELECT in SELECT

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

  • SELECT in SELECT

    Hi!

    Ist es mit MySQL grundsätzlich möglich eine SELECT Anweisung innerhalb einer SELECT Anweisung auszuführen?

    Gedacht wäre es so:

    1. SELECT (foo) liefert mir: 2. SELECT (bar) liefert mir:

    PHP-Code:
    u   v   w   p                        q   o
    -------------                        -----
    a   d   g   1                        1   x
    b   e   h   2                        2   y
    c   f   i   3                        3   z 
    Die beiden Anweisungen sollen so miteinander verknüpft werden, dass schlussendlich etwas bei rauskommt, das so ausschaut:

    PHP-Code:
    u   v   w   x   o
    -----------------
    a   d   g   1   x
    b   e   h   2   y
    c   f   i   3   z 
    Nur wie schreibt man das an?

    PHP-Code:
    SELECT uvwp
    FROM foo
    WHERE foo
    .SELECT qo
                  FROM bar 
    ... kanns ja wohl nicht sein.

    ein

    PHP-Code:
    SELECT
        t1
    .zahlt2.quadrat
    FROM
        tabelle1 t1
        INNER JOIN tabelle2 t2 ON t1
    .tab1_id t2.tab1_id 
    bringt mich da nicht weiter...

    Das Ergebnis "bar" ist wohlgemerkt keine Tabelle, sondern das Ergebnis einer SELECT Anweisung mit GROUP BY.

    Kann mir das Beispiel bitte jemand richtig stellen?

    Danke,
    Manuel.

  • #2
    wenn überhaupt mit join. select im select geht net! vielleicht isset auch gar nicht möglich, bin mir nämlich nicht sicher, ob ichs richtig verstanden hab.

    Kommentar


    • #3
      Nochmals einzeln:

      Code:
      [color=red]SELECT `thread_id` , `last_posting` , `subject` , `nickname`
      FROM `postings` , `threads`
      WHERE `thread_id` = `threads`.`id` AND `parent_id` = 0
      ORDER BY `date_time` DESC[/color]
      liefert mir:

      Code:
      thread_id    last_posting      subject           nickname
      2            22.02.04 19:47    zweiter thread    foo
      1            22.02.04 13:57    erster thread     bar


      Code:
      [color=blue]SELECT id, COUNT(`id`) AS count_id
      FROM `postings`
      GROUP BY `thread_id`[/color]
      liefert mir:

      Code:
      id       count_id
      1        5
      2        2


      Zusammen hab ich momentan folgendes Statement

      Code:
      [color=red]SELECT `thread_id` , `last_posting` , `subject` , `nickname`
      FROM `postings` , `threads`
      WHERE `thread_id` = `threads`.`id` AND `parent_id` = 0
      ORDER BY `date_time` DESC[/color] AS foo
      INNER JOIN ([color=blue]SELECT id, COUNT(`id`) AS count_id
                  FROM `postings`
                  GROUP BY `thread_id`[/color]) AS bar
      ON foo.`thread_id` = bar.`id`
      liefert Syntax-ERROR *seufz*

      Ich kann den Fehler beim besten Willen nicht entdecken. Hilfe!

      Kommentar


      • #4
        Code:
        SELECT
        	thread_id ,
        	last_posting ,
        	subject ,
        	nickname ,
        	COUNT(postings.id) count_id
        FROM threads
        INNER JOIN postings
        	ON ( threads.id = postings.thread_id )
        WHERE
        	parent_id = 0
        GROUP BY
        	threads.thread_id
        ORDER BY
        	date_time DESC
        da du anscheinend ein Forum schreiben willst,
        würde ich dir raten dringend die Grundlagen auf
        www.mysql.com zu konsultieren
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          @ TBT: danke erstmal für die antwort, aber ich denke, wir reden da ein wenig aneinander vorbei. um missverständnissen vorzubeugen, hab ich eine kleine testumgebung angelegt:
          Code:
          CREATE TABLE `postings` (
            `id` int(11) NOT NULL auto_increment,
            `thread_id` int(11) NOT NULL default '0',
            `parent_id` int(11) NOT NULL default '0',
            `nickname` varchar(20) NOT NULL default '',
            `subject` varchar(20) NOT NULL default '',
            PRIMARY KEY  (`id`)
          ) TYPE=MyISAM;
          
          INSERT INTO `postings` VALUES (1, 1, 0, 'franz', 'erster thread 0');
          INSERT INTO `postings` VALUES (2, 1, 1, 'heinz', 'erster thread 1');
          INSERT INTO `postings` VALUES (3, 1, 2, 'hans', 'erster thread 2');
          INSERT INTO `postings` VALUES (4, 1, 3, 'sepp', 'erster thread 3');
          INSERT INTO `postings` VALUES (5, 1, 1, 'fritz', 'erster thread 4');
          INSERT INTO `postings` VALUES (6, 6, 0, 'maria', 'zweiter thread 0');
          INSERT INTO `postings` VALUES (7, 6, 6, 'zenzi', 'zweiter thread 1');
          INSERT INTO `postings` VALUES (8, 6, 6, 'leni', 'zweiter thread 2');
          INSERT INTO `postings` VALUES (9, 6, 8, 'dani', 'zweiter thread 3');
          
          CREATE TABLE `threads` (
            `id` int(11) NOT NULL default '0',
            `last_posting` timestamp(14) NOT NULL,
            UNIQUE KEY `id` (`id`)
          ) TYPE=MyISAM;
          
          INSERT INTO `threads` VALUES (1, 20040101124530);
          INSERT INTO `threads` VALUES (6, 20040223101546);
          jetzt nochmals die einzelabfragen:
          Code:
          SELECT `thread_id` , `nickname` , `subject`
          FROM `postings`, `threads`
          WHERE `thread_id` = `threads`.`id` AND `parent_id` = 0
          
          ergebnis:
          
          thread_id     nickname     subject
          1             franz        erster thread 0
          6             maria        zweiter thread 0
          
          
          
          
          SELECT `id`, COUNT(`id`) AS count_id
          FROM `postings`
          GROUP BY `thread_id`
          
          ergebnis:
          
          id     count_id
          1      5
          6      4
          das von dir gepostete statement liefert:
          Code:
          SELECT `subject`, `nickname`, COUNT(postings.id) count_id, `last_posting`
          FROM `threads`
          INNER JOIN postings
              ON ( `threads`.`id` = `postings`.`thread_id` )
          WHERE `parent_id` = '0'
          GROUP BY `postings`.`thread_id`
          
          ergebnis:
          
          subject              nickname     count_id     last_posting
          erster thread 0      franz        [b]1[/b]            20040101124530
          zweiter thread 0     maria        [b]1[/b]            20040223101546
          ich hätte aber gerne etwas das aussieht, wie:
          Code:
          subject              nickname     count_id     last_posting
          erster thread 0      franz        [b]5[/b]            20040101124530
          zweiter thread 0     maria        [b]4[/b]            20040223101546

          Kommentar


          • #6
            nimm mal das "where parent=0" raus,
            dann geht es auch
            TBT

            Die zwei wichtigsten Regeln für eine berufliche Karriere:
            1. Verrate niemals alles was du weißt!


            PHP 2 AllPatrizier II Browsergame

            Kommentar


            • #7
              danke schön! vielen dank! hast mir einiges an arbeit erspart damit!

              Kommentar

              Lädt...
              X