kostenloser Webspace werbefrei: lima-city


Mysql nach Array selectieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi,
    Ich habe ein etwas komplizierteres Problem und ich weiss auch garnicht ob man das so einfach lösen kann.
    Ich habe eine Mysqltabelle mit zB 3 Spalten.

    Spalte1: Text
    Spalte2: Zahl
    Spalte3: Text;Text2;Text3;Text4

    die 1. und 2. SPalte sind ganz normal mit Text oder Zahlen gefüllt. In der 3. Zeile sind aber unterschiedlich viele Texte durch ein Semikolion ';' voneinander getrennt.

    Kann ich jetzt folgenda Abfrage durchführen?
    SELECT FROM tabellenname WHERE Spalte3 enthält text2

    Wie frage ich danach? Oder ist das so nicht sinnvoll bzw. Sollte ich lieber gleich ein Array speichern und dann fragen oder so?
    Vielen Dank & MFG
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ungetestet und ohne Garantie:
    SELECT * FROM tabelle WHERE spalte3 LIKE '%text2%'


    Aber eigentlich sollte man solche Datenbankstrukturen vermeiden, und für jeden Eintrag einen eigenen Datensatz anlegen...

    Beitrag zuletzt geändert: 6.7.2011 8:36:08 von alfr3d
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Vielen Dank.
    Ja, wegen der Datenstruktur. Es ist ja wie gesagt eine unterschiedliche Menge. Und eine feste Spaltenanzahl geht dann ja nicht.
    Oder gibt es da eine andere Lösung die etwas schicker ist?
    MFG
  5. SELECT * FROM tabelle WHERE MATCH (`spalte3`) AGAINST ('text2*' IN BOOLEAN MODE)


    Ich würds so machen. Ich bin aber noch nicht wach genug... ^^ Aber das dürfte schneller sein, als LIKE.

    EDIT:

    Ein Sternchen zu viel :-D

    Beitrag zuletzt geändert: 6.7.2011 9:12:49 von fabo
  6. Die Daten sind nicht atomar, das ist sehr unschön. Zur Behebung bietet sich eine weitere Tabelle an, die die momentan noch "zusammengeklebten" Werte als einzelne Datensätze aufnimmt. Über einen Fremdschlüssel kann man dann festlegen, zu welchem Datensatz der Haupttabelle sie gehören.
  7. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Ja eben nicht. Wenn ich jetzt 7 Werte mit ';' getrennt habe, dann braucht die andere Tabelle doch 7 spalten für jeden Wert eine.
    Wenn ich aber jetzt 1000 Werte habe, dann sind 7 zu wenig, bzw bei 1000 Spalten wären 993 ungenutzte Spalten, wenn ich darin nur 7 werte speichern würde. Mein Problem ist, dass ich unterschiedlich viele werte, also eine dynamische Anzahl in eine feste, statische Tabelle reinpacken möchte.
    MFG
  8. programtools schrieb:
    Ja eben nicht. Wenn ich jetzt 7 Werte mit ';' getrennt habe, dann braucht die andere Tabelle doch 7 spalten für jeden Wert eine.
    Wenn ich aber jetzt 1000 Werte habe, dann sind 7 zu wenig, bzw bei 1000 Spalten wären 993 ungenutzte Spalten, wenn ich darin nur 7 werte speichern würde. Mein Problem ist, dass ich unterschiedlich viele werte, also eine dynamische Anzahl in eine feste, statische Tabelle reinpacken möchte.
    MFG


    Du darfst pro Datensatz nur einen Text speichern. Und dann wie deddyh schon gesagt hat, über einen Fremdschlüssel festlegen zu welchem Datensatz er gehört. Wenn du also 7 "Texte" hast, legst du einfach 7 Datensätze an, und bei 1000 eben 1000...


    Beitrag zuletzt geändert: 7.7.2011 10:09:02 von alfr3d
  9. Was deddyh und alfr3d sagen wollen, ist Folgendes:

    Tabelle1
    ------------------------------------
    | ID           | Spalte2 | Spalte3 |
    ------------------------------------
    | 1            | Text    | Zahl    |
    ------------------------------------
    
    Tabelle2
    ---------------------
    | Spalte1 | Spalte2 |
    ---------------------
    | Text    | 1       |
    | Text2   | 1       |
    | Text3   | 1       |
    | Text4   | 1       |
    ---------------------

    Die Tabelle1 enthält einen Primärschlüssel, der jede Zeile eindeutig identifiziert. In der Tabelle2 wird mit einem Fremdschlüssel auf genau diesen einen Datensatz referenziert. Bei der Abfrage machst du dann einen JOIN. Alles klar? :biggrin:

    Beitrag zuletzt geändert: 7.7.2011 10:06:49 von wagnerm
  10. Haargenau. Oder etwas anders beschrieben:
    /* Mastertabelle */
    ID
    Feld1
    Feld2
    
    /* Detailtabelle */
    ID
    Master_ID --das ist die Referenz auf die Mastertabelle
    Feld1
    Feld2

    Um nun z.B. alle Daten für den Master-Datensatz mit der ID 1 zu bekommen, joint man diese gegen die Detailtabelle
    SELECT
      *
    FROM
      Mastertabelle M
    JOIN
      Detailtabelle D ON D.Master_ID = M.ID
    WHERE
      M.ID = 1


    Als Ergebnis bekommt man dann so viele Datensätze zurück, wie in der Detailtabelle mit der entsprechenden Master_ID vorhanden sind. Falls man das lieber alles in einem Datensatz haben möchte wie im Ausgangspost, dann muss man eben auf GROUP_CONCAT zurückgreifen.

    Beitrag zuletzt geändert: 7.7.2011 11:41:35 von deddyh
  11. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Achso, sorry ich hab nicht gleich verstanden dass es sich um 2 Tabellen handelt. Ist natürlich so eine sehr saubere Variuante, auch wenn man 2 Tabellen braucht. Vielen Dank für die Hilfe, so mach ichs ;)
    MFG

    EDIT

    Ich habe noch eine Frage.
    Ich habe jetzt eine Tabelle mit den feldern code, value1 und value2 und meine schlüsseltabelle mit code und pid.

    Ich habe jetzt die pid der 2. Tabelle und möchte jetzt darüber aus der 1. TAbelle value1 und value2 ausgeben (da wo in Tabelle1 code = Tabelle2 code)

    Beitrag zuletzt geändert: 8.7.2011 16:44:15 von programtools
  12. Sofern ich Dich richtig verstanden habe:
    SELECT
      D.value1, D.value2
    FROM
      Mastertabelle M
    JOIN 
      Detailtabelle D ON D.code = M.code
    WHERE
      M.pid = <Deine pid>
  13. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Super ! Vielen vielen Dank. Abfragen über mehrere Tabellen fand ich immer recht kompliziert, aber wenn man einmal das Grundprinziep verstanden hat ist es doch sehr nützlich.

    Hat mir sehr geholfen. MFG
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!