Datensätze mit einer bestimmten ID ausgeben.

  1. fabs

    fabs Thread StarterMacUser Mitglied

    Mitglied 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
     
    fabs, 24.08.2006
  2. Sojus

    SojusMacUser Mitglied

    Mitglied 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
     
    Sojus, 24.08.2006
  3. fabs

    fabs Thread StarterMacUser Mitglied

    Mitglied 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"?
     
    fabs, 24.08.2006
  4. simusch

    simuschMacUser Mitglied

    Mitglied seit:
    27.09.2004
    Beiträge:
    2.239
    Zustimmungen:
    188
    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
     
    simusch, 24.08.2006
  5. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545

    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!
     
    wegus, 24.08.2006
  6. 2nd

    2ndMacUser Mitglied

    Mitglied seit:
    25.07.2004
    Beiträge:
    8.901
    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

    ThaHammerMacUser Mitglied

    Mitglied 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.
     
    ThaHammer, 25.08.2006
  8. fabs

    fabs Thread StarterMacUser Mitglied

    Mitglied 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?
     
    fabs, 25.08.2006
  9. wegus

    wegusMacUser Mitglied

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

    joedelordMacUser Mitglied

    Mitglied seit:
    12.12.2002
    Beiträge:
    481
    Zustimmungen:
    0
    joedelord, 25.08.2006
Die Seite wird geladen...
Ähnliche Themen - Datensätze einer bestimmten
  1. Saugkraft
    Antworten:
    7
    Aufrufe:
    1.895
    Saugkraft
    09.10.2014
  2. kebernerd
    Antworten:
    1
    Aufrufe:
    1.882
    QBFinest
    02.02.2011
  3. ThaHammer
    Antworten:
    13
    Aufrufe:
    855
  4. Der_Jan
    Antworten:
    3
    Aufrufe:
    528
    master_p
    07.07.2005
  5. 2nd
    Antworten:
    18
    Aufrufe:
    1.487