Datensätze mit einer bestimmten ID ausgeben.

Dieses Thema im Forum "Datenbanksysteme für das Web" wurde erstellt von fabs, 24.08.2006.

  1. fabs

    fabs Thread Starter MacUser Mitglied

    MacUser seit:
    19.06.2005
    Beiträge:
    247
    Zustimmungen:
    1
    Hi, ich habe vor mir ein kleines Newssystem zu basteln. Hierbei werden die news in verschiedene Kategorien unterteilt und in eine Feld gespeichert.

    also zum Beispiel so!

    News_id - Kategorie
    1 - 1,2
    2 - 2
    3 - 1
    4 - 2,3,4
    5 - 12,3

    Wie kann ich jetzt alle Datensätze abrufen wo die id 2 vorkommt?

    Danke, fabs
     
  2. Sojus

    Sojus MacUser Mitglied

    MacUser seit:
    30.05.2006
    Beiträge:
    143
    Zustimmungen:
    3
    Das ist sehr unschön und nicht sehr professionel.

    Normalerweise macht man das über eine Zwischentabelle. (Auflösung einer m-m Beziehung wenns dich interessiert).

    Also:
    Du hast 3 Tabellen:

    News: Hier werden die News gespeichert, die muss mindestens diese spalten haben:

    news_id news_text ...usw

    Kategoriene: Hier werden die verschiedenen kategoriene gespeichert.

    kategorie_id kategorie_name

    news_kategorie: Jetzt kommt der Trick :) in dieser zwischentabelle werden einer news die kategorieen zugeordnet.

    news_id kategorie_id

    die einträge könnten dann etwa so ausehen:

    1 1
    1 2
    1 3

    dann gehört die news 1 zu den kategorien 1, 2 und 3.

    habe hier mal eine beispiel DB als sqldump:
    Code:
    -- phpMyAdmin SQL Dump
    -- version 2.8.1
    -- http://www.phpmyadmin.net
    -- 
    -- Host: localhost
    -- Erstellungszeit: 24. August 2006 um 18:17
    -- Server Version: 5.0.21
    -- PHP-Version: 5.1.4
    -- 
    -- Datenbank: `suem`
    -- 
    
    -- --------------------------------------------------------
    
    -- 
    -- Tabellenstruktur für Tabelle `kategorie`
    -- 
    
    CREATE TABLE `kategorie` (
      `kat_id` int(11) NOT NULL auto_increment,
      `kat_name` text collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`kat_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
    
    -- 
    -- Daten für Tabelle `kategorie`
    -- 
    
    INSERT INTO `kategorie` VALUES (1, 'Computer');
    INSERT INTO `kategorie` VALUES (2, 'OS');
    INSERT INTO `kategorie` VALUES (3, 'Apple');
    
    -- --------------------------------------------------------
    
    -- 
    -- Tabellenstruktur für Tabelle `news`
    -- 
    
    CREATE TABLE `news` (
      `news_id` int(11) NOT NULL auto_increment,
      `news_name` text collate latin1_general_ci NOT NULL,
      PRIMARY KEY  (`news_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;
    
    -- 
    -- Daten für Tabelle `news`
    -- 
    
    INSERT INTO `news` VALUES (1, 'Leopard kommt im Frühling');
    INSERT INTO `news` VALUES (2, 'Bill gates run''s like a girl');
    
    -- --------------------------------------------------------
    
    -- 
    -- Tabellenstruktur für Tabelle `news_kategorie`
    -- 
    
    CREATE TABLE `news_kategorie` (
      `news_id` int(11) NOT NULL,
      `kat_id` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    
    -- 
    -- Daten für Tabelle `news_kategorie`
    -- 
    
    INSERT INTO `news_kategorie` VALUES (1, 1);
    INSERT INTO `news_kategorie` VALUES (1, 2);
    INSERT INTO `news_kategorie` VALUES (1, 3);
    INSERT INTO `news_kategorie` VALUES (2, 2);
    
    
    MIt diesem Query kannst du jetzt alle news auslesen, die zur kategorie 2 gehören

    SELECT news.news_name
    FROM news, news_kategorie
    WHERE news_kategorie.kat_id =2
    AND news_kategorie.news_id = news.news_id






    mfg
     
    Zuletzt bearbeitet: 24.08.2006
  3. fabs

    fabs Thread Starter MacUser Mitglied

    MacUser seit:
    19.06.2005
    Beiträge:
    247
    Zustimmungen:
    1
    Hi, dies wäre meine zweite Möglichkeit gewesen das zu realisieren. Kommt hierbei nicht eine sehr große Menge an Daten zusammen. Immerhin gibt es so pro News viele Kategorie einträge?

    Oder fällt das nicht ins "gewicht"?
     
  4. simusch

    simusch MacUser Mitglied

    MacUser seit:
    27.09.2004
    Beiträge:
    2.226
    Zustimmungen:
    187
    nö ins gewicht fällt das nicht...

    diese sogenannte Normalform für Tabellen erleichtert dir einiges an Arbeit, wenn du etwas verändern willst... :)

    machs einfach so und kümmere dich nicht um die Anzahl Einträge...

    Simu
     
  5. wegus

    wegus MacUser Mitglied

    MacUser seit:
    13.09.2004
    Beiträge:
    14.714
    Zustimmungen:
    1.348

    Stimmt die Normalenform ist sehr hilfreich!

    Außerdem wen interssieren bei 3-stelligen Gigabytes auf Festplatten auch nur ein paar 100.000 Zahlenpaare im 8 oder 16 Bit Format? Früher hat man mit sowas gegegeizt. Heute nutzt man das zur Beschleunigung! Nur zu, wo es doch schon so ausführlich erläutert wurde!
     
  6. 2nd

    2nd MacUser Mitglied

    MacUser seit:
    25.07.2004
    Beiträge:
    8.902
    Zustimmungen:
    242
    Da habe ich auch noch eine Frage :)

    Wenn ich die News unterteilt habe:

    • Headline
    • Autor
    • Text
    • Datum

    Zusätzlich habe ich teilweise noch Fotos dabei oder Videos:

    • FotoURL
    • FotoThumbnailURL

    • VideoURL
    • VideoScreenshotURL

    Wie baue ich dann die Datenbank auf? Kann ich meine wie oben "zusammengefassten" Felder in jeweils eine Tabelle speichern? Und dann die Auflösungstabelle dazu? Oder für "Autor", "Datum", "Headline" etc. jeweils eine Tabelle mit Auflösungstabelle? Auf irgendwas muss ich mich ja beziehen ;)

    2nd
     
  7. ThaHammer

    ThaHammer MacUser Mitglied

    MacUser seit:
    01.06.2004
    Beiträge:
    3.277
    Zustimmungen:
    13
    Verknüpfe die Tabellen mit einer BenutzerID, als Beispiel. Dann kannst Du drei Tabellen draus machen, jeweils ergänzt um die BenutzerID.
     
  8. fabs

    fabs Thread Starter MacUser Mitglied

    MacUser seit:
    19.06.2005
    Beiträge:
    247
    Zustimmungen:
    1
    Soll man diese oben angeführte "Technik" auch für Galerien verwenden zu der Bilder verknüpft werden?

    Also so zb

    Tabelle Bild2Galerie (BID = Bild ID, GID = Galerie ID)
    ID - GID - BID
    1 - 1 - 1
    1 - 1 - 2
    1 - 1 - 3
    1 - 1 - 4
    1 - 2 - 1
    1 - 2 - 5

    etc?
     
  9. wegus

    wegus MacUser Mitglied

    MacUser seit:
    13.09.2004
    Beiträge:
    14.714
    Zustimmungen:
    1.348
    der DB ist nun wirklich egal, was Du mit den Zahlen verwaltest ;)
    Die Technik ist durchaus empfehlenswert bei relationalen DBMS!
     
  10. joedelord

    joedelord MacUser Mitglied

    MacUser seit:
    12.12.2002
    Beiträge:
    481
    Zustimmungen:
    0
Die Seite wird geladen...

Diese Seite empfehlen