probleme bei einer sql abfrage



  • hi,

    ich habe eine zuordnungtabelle "products_to_categories" mit einem sehr einfachen aufbau:

    products_id : categories_id

    ein produkt kann somit mehreren kategorien zugeordnet werden.

    nun brauche ich eine spezielle abfrage und schaffe es einfach nicht. es geht darum, dass ich eine spezielle products_id habe. nun möchte ich alle anderen products_id ermitteln die in den kategorien sind, wo auch meine vorgegebene products_id ist.

    geht sowas überhaupt in einem sql befehl? ich kann es mir grad nicht vorstellen. eventuell mit zwei abfragen, nur will ich auch nicht unnötige performance verschwenden.

    wäre cool wenn mir jemand auf die sprünge helfen könnte.

    martin



  • sollte (wenn ich mich recht entsinne) ungefähr so gehen

    SELECT products_id FROM products_to_categories
      WHERE cathegoies_id IN (
        SELECT cathegories_id FROM products_to_categories
          WHERE product_id = /* hier die ID */
      );
    

    geb aber keine Garantie für...



  • DocJunioR schrieb:

    sollte (wenn ich mich recht entsinne) ungefähr so gehen

    SELECT products_id FROM products_to_categories
      WHERE cathegoies_id IN (
        SELECT cathegories_id FROM products_to_categories
          WHERE product_id = /* hier die ID */
      );
    

    geb aber keine Garantie für...

    laut Standard geht das, leider können Subanfragen nur wenige Server, MySQL schafft bspweise das nicht.



  • Dann vielleicht so - auch wenn es nicht das Schnellste ist):

    SELECT DISTINCT t1.products_id FROM products_to_categories AS t1 LEFT JOIN products_to_categories AS t2 USING (categories_id) WHERE t2.product_id = /* hier die ID */;
    

    Ist allerdings ungetestet nur so dahingeschrieben - einfach mal ausprobieren 😉



  • hi,

    subqueries sind ab mysql 4.1 oder so auf jeden fall möglich. sehe nur das bei knapp 300k die abfragen derbe lange braucht, also wenn ich alles berechnen will, dauert das sicherlich 2 tage oder so.

    martin



  • was für nen Rechner hast du? 😮

    Die Datenbankgröße ist nicht entscheidend sondern die zutreffende Anzahl von Einträgen.
    Allerdings ist MySQL ab ner gewissen Anzahl Datensätze nicht mehr so ganz das Wahre (habsch mal gelesen getut)



  • Ich verwende hier selbst JOIN`s in Abfragen auf Tables die jeweils mehrere Millionen Datensätze haben.
    Ein lange Abfrage dauert hier max. 5 Sekunden.
    Ist ein Dual-Xeon 2 GH mit 1 GB speicher.
    Es sind aber mehrere USER gleichzeitig auf diesem Server.
    Somit stufe ich MySQL nicht als langsam ein. MySQL hat nicht im der Geschwindikeit Probleme. Diese liegen woanders und sind vom Entwicklerteam wegen des Tempos gewollt.

    Gehe ich jetzt davon aus das es sich hier um eine Shop oder ähnliches handelt dann sind dort sicher nicht mehrere Millionen Produkte drin.
    Sollte es doch so sein kann sich dieses Unternehmen auch eine Server Leisten der solche Abfrage aushält.


Anmelden zum Antworten