Reihenfolge fehlerhaft

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

  • Reihenfolge fehlerhaft

    Hallo,

    ich nage nun schon zwei Tage an diesem Problem. Dafür habe ich mich mal registriert, ich hoffe hier kann mir jemand weiter helfen.

    Grundsätzlich geht es um ein Script, welches Bildergalerien dem Besitzer in der Reihenfolge auflisten soll, in der diese zuletzt kommentiert wurden. Dabei werden sehr viele Tabellen abgerufen. Um es übersichtlich zu halten habe ich dazu mal ein kleines ähnliches Script mit dem selben Problem geschrieben.

    Es gibt hier 2 Tabellen. Einmal 'Häuser' und einmal 'Bewohner'. Einzelnen Häuser-Einträgen sollen teilw. mehrere Bewohner-Einträge zugeordnet werden. Ich möchte nun, die Häuser inkl. ihrer Bewohner ausgeben. In der Reihenfolge, in der zuletzt jemand eingezogen ist. Also Rückwärts nach der bewohner.Id


    Datenbank:
    Code:
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    
    --
    -- Datenbank: `test`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `bewohner`
    --
    
    CREATE TABLE IF NOT EXISTS `bewohner` (
      `id` int(11) NOT NULL auto_increment,
      `haus` int(11) NOT NULL,
      `name` varchar(100) NOT NULL,
      PRIMARY KEY  (`id`),
      KEY `haus` (`haus`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
    
    --
    -- Daten für Tabelle `bewohner`
    --
    
    INSERT INTO `bewohner` (`id`, `haus`, `name`) VALUES
    (1, 1, 'peter'),
    (2, 1, 'michaela'),
    (3, 2, 'frank'),
    (4, 7, 'torsten'),
    (5, 7, 'nina'),
    (6, 7, 'ralf'),
    (7, 7, 'ingeborg'),
    (8, 10, 'tim'),
    (9, 10, 'Irmgard'),
    (10, 3, 'Fridolin'),
    (11, 6, 'Marianne'),
    (12, 6, 'Paulus'),
    (13, 10, 'Bernd'),
    (14, 7, 'Adolf'),
    (15, 2, 'Lutz'),
    (16, 3, 'Gerhard');
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `haus`
    --
    
    CREATE TABLE IF NOT EXISTS `haus` (
      `id` int(11) NOT NULL,
      `verwalter` varchar(100) NOT NULL,
      UNIQUE KEY `id` (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Daten für Tabelle `haus`
    --
    
    INSERT INTO `haus` (`id`, `verwalter`) VALUES
    (1, 'Mueller'),
    (2, 'Mueller'),
    (3, 'Kohl'),
    (6, 'Mueller'),
    (7, 'Mueller'),
    (10, 'Mueller');
    Script:

    PHP-Code:
    <?

    if(!@is_numeric($_REQUEST['verwalter'])) {
        $_REQUEST['verwalter'] = "Mueller";
    }


    $query1 = mysql_query("SELECT
                                haus.id,
                                haus.verwalter,
                                bewohner.id AS bId
                            FROM
                                haus
                            JOIN
                                bewohner ON (bewohner.id=haus.id)
                            WHERE
                                haus.verwalter='$_REQUEST[verwalter]'
                            ORDER BY
                                bewohner.id DESC,
                                haus.id DESC
                            LIMIT 40
                            ") or die(mysql_error());
                        
    while ($data=mysql_fetch_array($query1)) {

        print '<b>Haus: '.$data['id'].'</b> ('.$data['verwalter'].')<br>';
    #    print 'Name: '.$data['name'].'('.$data['id'].')<br>';
    #    print 'verwalter: '.$data['verwalter'].'<br>';
        print '<br>';
        
        $query2 = mysql_query("SELECT
                                    bewohner.name,
                                    bewohner.id
                                FROM
                                    bewohner
                                WHERE
                                    bewohner.haus = '$data[id]'
                                ORDER BY
                                    bewohner.id DESC
                                ") or die(mysql_error());
                                
            while($data2=mysql_fetch_array($query2))    {
                print '<u>'.$data2['name'].' ('.$data2['id'].')</u><br>';
            }

        print '<br>-----------<br>';
    }


    error_reporting(E_ALL);                 
    ?>
    Ich habe schon alles mögliche ausprobiert. ORDER BY, GROUP BY, DISTINCT (weil ab und zu die Häuser mehrfach ausgegeben werden)... EXISTS (macht nicht viel Sinn, da auch 'leere Häuser' berücksichtigt werden sollen)

    Ich wäre echt glücklich, wenn das Problem gelöst wäre!



    Generell: Anfangs wollte ich das mit einem einzigen Query lösen, mit dem ich mir dann ein Multi-Array füllen wollte, um dieses schön ausgeben zu können - Leider habe ich keine Möglichkeit gefunden. Ist dies generell möglich mit MySQL?

  • #2
    Falsche Ausgabe:
    Haus 2 sollte an erster Stelle stehen, weil Lutz ID 15 hat


    Haus: 10 (Mueller)

    Bernd (13)
    Irmgard (9)
    tim (8)

    -----------
    Haus: 7 (Mueller)

    Adolf (14)
    ingeborg (7)
    ralf (6)
    nina (5)
    torsten (4)

    -----------
    Haus: 6 (Mueller)

    Paulus (12)
    Marianne (11)

    -----------
    Haus: 2 (Mueller)

    Lutz (15)
    frank (3)

    -----------
    Haus: 1 (Mueller)

    michaela (2)
    peter (1)

    -----------

    Die Häuser sollen aufgelistet werden. Sortiert nach dem letzten Einzug eines neuen Mitbewohners ( bewohner.id )

    Kommentar

    Lädt...
    X