Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: SQL-Abfrage - Spalte 1 in Abhängigkeit zu Spalte 2 per Select auswerten?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 14.022
    • Geschlecht:
    Habe mir den ganzen Thread jetzt nochmal angetan.
    Sag mal, wie lange willst du hier andere Leute beschäftigen ohne zu sagen was du eigentlich machen willst ?
    Wie Wayne Tsun weiter oben bereits gesagt hat
    - von dir, was denn Sinn seiner Aussage betrifft, so gut wie ignoriert -
    erfährt man hier erst nach und nach was du eigtl. machen willst.
    Wundert dich nicht, daß dir im Verlaufe des Thread schon vier Personen gesagt haben, daß deine Query in Ordnung ist ?

    Wo du die Query eigentlich benutzt, sprich, in welcher Datei,
    daß du eigentlich bei Klick auf ein Hersteller-Logo
    - also dabei auf einer Übersichtsseite eines Hersteller landest -
    das gewünschte Ergebnis bekommen möchtest,
    erfährt man hier erst nach und nach.

    In der 1.06 (ob vorher schon weiß ich gerade nicht) gibt's in der /includes/modules/default.php einen Filter, der über einen GET-Parameter übergeben und nach Kategorie filtert.
    Das geschieht über das Filter-Dropdown in jeder Kategorie.
    Das mal als Vorlage nehmen.

    Wenn du per Klick auf ein Herstellerlogo
    - welches ja wahrscheinlich vom Shop automatisch aus dem Logo welches beim betreffenden Hersteller im Backend eingefügt ist generiert wird -
    das Filterergebnis haben möchtest, mußt du einen tieferen Eingriff in's System vornehmen.
    Der Shop kann ja nicht wissen nach welcher Kategorie du gerade filtern willst wenn du einfach nur auf ein Herstellerlogo klickst.
    Ohne Übergabe eines Filter-GET-Parameters dürfte dein Wunsch schwer durchführbar sein.

    Was heißt denn genau "Multishop" ?
    Manche Kategorien gibt's nur in einem Shop, es wird jedoch die gleiche Datenbank benutzt ?
    Falls ja, wie wird das unterschieden ?
    Hat jeder Shop eine ID ?
    (Sorry, ich (und alle anderen hier)  kenne(n) deine Multishoplösung ja nicht.)
    Will sagen, so wie die Shops unterschieden werden, muß auch die Herstellerausgabe unterschieden werden.

    Mehr kann man hier ohne genauere Kenntnisse wirklich nicht sagen,
    zumindest nicht ohne die von Matt erwähnte  :glaskugel: .

    Gruß,
    Oli

    0815

    • Viel Schreiber
    • Beiträge: 905
    Ich war eigentlich der Meinung alles entsprechend erklärt zu haben.
    Unabhängig davon bezog sich die Ausgangsfrage auf eine eher allgemeine SQL-Abfrage, bzw. wie man diese zusammenfasst um eine gewünschte Funktion zu bewirken.

    Was ich grundsätzlich machen will, habe ich m. E. mehrfach erklärt, bzw. es wenigstens versucht.

    Das nun alles anders kam, lag an einem Denkfehler meinerseits. Sorry dafür, aber ich bin weiß Gott nicht unfehlbar und leider auch kein Programmierer. Ich habe zwar schon sehr viele komplizierte Dinge am Shop erfolgreich selbst geändert, allerdings läuft dabei ein Großteil über Try & Error.
    Wenn ich die Zeit hätte, würde ich mal ein SQL-Tutorial durcharbeiten, aber ich habe wohl auch mehr Spaß an learning by doing.

    Was den Multishop angeht, so kann ich hier nicht ins Detail gehen, weil ich sonst den ganzen Shop hier hochladen müsste. Der Multshop ist über mehrere Jahre entstanden und gereift. Eine Anleitung gibt's dazu leider nicht, denn es kam immer mal etwas Neues dazu und es wurde bei Weitem leider nicht alles dokumentiert, bzw. in allen geänderten Dateien entsprechend kommentiert.

    Angefangen hat es mit einem normalen XTC und wurde dann auf einen modified übertragen. Automatisierte Updates sind dadurch definitiv ausgeschlossen.

    Wie auch immer, ich will hier niemanden unnötig von der Arbeit abhalten, aber mit der o.g. Problematik und mit dem Hintergrund kein Programmierer zu sein, ist es nicht so einfach die eigenen Gedanken und Ansätze verständlich zu vermitteln.

    Wie auch immer, ich werde heute Nacht mal weiter an einer Lösung arbeiten, jetzt wo ich die Problematik endlich erfaßt habe. Das die SQL Abfrage die ganze Zeit korrekt war hat sich meinem Hirn erst erschlossen, als ich dem Vorschlag von Matt gefolgt bin und das Ganze in der Datenbank ausgeführt habe.
    Werde ich wohl in Zukunft immer so handhaben.

    Noch kurz zu Deinen Fragen:
    - Es ist ein Mutishop mit einer Datenbank.
    - Jeder Shop hat u.a. seine eigene Tabelle Categories und Configuration in der Datenbank.
    - Unterschieden wird per
    Code: PHP  [Auswählen]
    $domain = $_SERVER['SERVER_NAME'];
    switch($domain) ... case Abfrage
    und das in diversen Dateien.
    - jeder Shop hat einen eigenen ID Bereich für die Kategorien
    - Die Unterscheidung der Hersteller funktioniert ja bereits mit der von mir geänderten Abfrage (BETWEEN, etc.)

    Das System ist heftig modified. Das bringt natürlich auch Nachteile mit sich und regelmäßig neue Welten die es zu erforschen und bereisen gibt. Mir macht das Spaß, jedenfalls meistens.
    I.d.R. habe ich fast wöchentlich eine neue Idee, wie ich den Shop für meine Zwecke verbessern möchte. Ich schau mir hier auch regelmäßig die neusten Module und Bastellösungen an, um diese dann entsprechend einzuarbeiten, sofern ich einen Mehrwert darin sehe.

    Weitere Fragen?

    Zitat von: noRiddle
    Wenn du per Klick auf ein Herstellerlogo
    - welches ja wahrscheinlich vom Shop automatisch aus dem Logo welches beim betreffenden Hersteller im Backend eingefügt ist generiert wird -
    das Filterergebnis haben möchtest, mußt du einen tieferen Eingriff in's System vornehmen.
    Der Shop kann ja nicht wissen nach welcher Kategorie du gerade filtern willst wenn du einfach nur auf ein Herstellerlogo klickst.
    Ohne Übergabe eines Filter-GET-Parameters dürfte dein Wunsch schwer durchführbar sein.

    Im Prinzip macht der Shop mittels Gunnart Modul und meiner Anpassung fast schon alles richtig.

    Es werden nur die Hersteller mit Logo und Link ausgegeben, welche auch mit den Produkten im Shop verlinkt sind.
    Das Problem ist der Link, denn dieser ruft alle Produke auf, die der Hersteller-ID zugeordnet sind.
    Das betrifft im Moment leider auch die Produkte des Herstellers, welche sich nicht im PRODUCTS-TO_CATEGORIES ID-Bereich der entsprechenden Domain befinden, d.h. dem Shop eigentlich gar nicht zugeordnet sind.

    0815

    • Viel Schreiber
    • Beiträge: 905
    So, die Abfrage mit den Produkten habe ich halbwegs fertig:

    Code: PHP  [Auswählen]
    $manufacturers_query = xtDBquery("
                    select distinct
                            m.manufacturers_id,
                            m.manufacturers_name,
                            m.manufacturers_image,
                            p2c.products_id
                    from    "
    .TABLE_MANUFACTURERS." m,
                            "
    .TABLE_PRODUCTS." p,
                            "
    .TABLE_PRODUCTS_TO_CATEGORIES." p2c
                    where m.manufacturers_id = p.manufacturers_id
                    and p.products_status = 1
                    and p.products_id = p2c.products_id
                    and p2c.categories_id BETWEEN '"
    .$c_start."' AND '".$c_end."'
                    "
    .$fsk_lock."
                    "
    .$group_check."
                    group by m.manufacturers_id
                    order by m.manufacturers_name
            "
    );

    Ausgegeben wird:
    manufacturers_id
    manufacturers_name
    manufacturers_image
    products_id
    ... alles passen zur jeweiligen Domain.

    Jetzt muss dass Ganz "nur noch" mit dem URL-Aufruf kombiniert werden.

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    @noRiddle: danke, dass Du Dir Gedanken um die übrige arbeitende Bevölkerung machst, aber ich sag´ schon Bescheid, wenn ich für meinen Teil keinen Bock oder keine Zeit mehr habe - bin schon groß  :lol2: Also nicht immer gleich alle Kanonen ziehen  ;-)

    @0815: tja, da haben wir nun an einem query rumgebastelt, das prinzipell nicht dem entspricht, was du eigentlich brauchst. Zum Glück hat Matt da den entscheidenden Hinweis gegeben. Aber bist ja jetzt offenbar auf dem richtigen Wege. Viel Erfolg!

    Gruß, Ingo

    P.S.: Noch eine Sache am Rande - habe schon ein paar Multi-Site-Lösungen programmiert (CMS, Shops & andere Webapplikationen) und habe bei der Domain- bzw. Host-Abfrage immer $_SERVER['HTTP_HOST'] statt $_SERVER['SERVER_NAME'] verwendet. Google mal "$_SERVER['HTTP_HOST'] vs. $_SERVER['SERVER_NAME']" und Du weißt warum ... ist aber ehrlich gesagt kein gravierendes Sicherheitsdefizit, meiner Meinung, sofern an anderen Stellen keine grundlegenden Fehler gemacht wurden.

    0815

    • Viel Schreiber
    • Beiträge: 905
    Moin,

    dass mit dem HTTP_HOST schaue ich mir nachher mal an.

    Auf dem richtigen weg bin ich wahrscheinlich schon, allerdings weiß ich noch nicht wie ich den Link mit den aus der Abfrage gewonnenen Daten füttern soll.

    Auf jeden Fall muss aus der Abfrage die Zeile:
    Code: PHP  [Auswählen]
    group by m.manufacturers_id

    ... das geht so nämlich gar nicht.
    Allerdings werden ohne die Abfrage für jedes Produkt die URL und ein Logo ausgegeben.

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    @0815: Tüfftel Du jetzt erstmal ein bißchen selbst  ;-) und / oder frag Tante G. so lernt man häufig am besten.

    Noch eine Sache @ Matt:

    Es hilft nicht immer, das query direkt in anderen MySQL-Tools (z.B. PHPMyAdmin) ausführen zu lassen - denn diese interpretieren nicht immer wie Dein PHP, oder anders gesagt: sie "verzeihen" oft mehr - insbesondere beim Setzen von quotes. Das kann manchmal zu noch größerer Verwirrung führen.

    Gruß, Ingo

    0815

    • Viel Schreiber
    • Beiträge: 905
    Tante G. hilft im Moment wenig, denn eine Antwort zu finden ohne zu wissen wie man die passende Frage zu stellen hat, hilft nicht weiter.

    Mir erschließt sich nicht, warum sich Logo und Link unnötig vervielfältigt, bzw. wie ich die Ausgabe pro Hersteller auf 1x begrenzen kann.

    So bald ich im Select die Spalte p2c.products_id abfrage, geht der Ärger los. Die Spalte benötige ich jedoch leider für den späteren Linkaufbau.

    Vielleicht ist es für mein Hirn einfach zu spät, aber um im Liveshop zu arbeiten ist die Nacht leider die beste Zeit. :-)

    Matt

    • Experte
    • Beiträge: 4.241
    Es hilft nicht immer, das query direkt in anderen MySQL-Tools (z.B. PHPMyAdmin) ausführen zu lassen - denn diese interpretieren nicht immer wie Dein PHP, oder anders gesagt: sie "verzeihen" oft mehr - insbesondere beim Setzen von quotes. Das kann manchmal zu noch größerer Verwirrung führen.

    Mir wird hier generell etwas zu viel auf angeblichen Problemen mit Quotes rumgeritten, die es in der Realität faktisch nicht gibt. Aber unabhängig davon ist die MySQL-Konsole eher unverzeihlich.

    Mir erschließt sich nicht, warum sich Logo und Link unnötig vervielfältigt, bzw. wie ich die Ausgabe pro Hersteller auf 1x begrenzen kann.

    Vermutlich fehlt irgendwo ein JOIN.

    0815

    • Viel Schreiber
    • Beiträge: 905
    Mit einem "LEFT OUTER JOIN" habe ich eben mal experimentiert, aber das hat leider nichts gebracht.
    Liegt vermutlich daran, dass ich nicht ganz verstehe was ein JOIN macht und es deshalb nicht korrekt anwende.
    Mein letzter Versuch sah so aus:
    Code: PHP  [Auswählen]
    select distinct
                            m.manufacturers_id,
                            m.manufacturers_name,
                            m.manufacturers_image,
                            p2c.products_id
                    from  ".TABLE_MANUFACTURERS." m,
                            ".TABLE_PRODUCTS." p
    LEFT OUTER JOIN ".TABLE_PRODUCTS_TO_CATEGORIES." p2c ON (p2c.categories_id BETWEEN '".$c_start."' AND '".$c_end."')
                    where m.manufacturers_id = p.manufacturers_id
                    and p.products_status = 1
                    and p.products_id = p2c.products_id
                    ".$fsk_lock."
                    ".$group_check."
                    order by m.manufacturers_name
            ");

    Läuft zwar ohne Fehlermeldung, allerdings ändert sich bei der Ausgabe auch nichts.

    Grundsätzlich erscheint mir das auch logisch, denn wenn ich den Aufruf in MySQL eingebe, wird ja zu jeder ermittelten products_id auch eine manufacturers_id ausgegen. Da mehrere Produkte von einem Hersteller gefunden werden, kommt die gleiche manufacturers_id natürlich auch mehrfach vor.
    Bei der Ausgabe wird dann für jedes gefundene Produkt einen Link und ein Logo ausgegeben.

    .... aber wie stellt man das ab? Muss man da zwei getrennte Datenbankabfragen machen, oder ist ein JOIN (davon gibt's ja scheinbar mehrere Varianten) tatsächlich die richtige Lösung, sofern man diesen korrekt programmiert?

    0815

    • Viel Schreiber
    • Beiträge: 905
    So, ich hab' mich jetzt mal mehr als zwei Stunden mit dem Thema Joins beschäftigt, Beispiele angesehen und einiges ausprobiert.
    Geholfen hat mir das leider nicht. Ob ein Join hier die Lösung bringt weiß ich nach wie vor nicht und schon gar nicht welche der Abfragen in ein Join gepackt werden muss.
    Als Sql Anfänger ist mir das alles zu komplex.

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    @Matt:
    Zitat
    Mir wird hier generell etwas zu viel auf angeblichen Problemen mit Quotes rumgeritten, ...

    Dann antworte doch nicht auf meinen Post - um so schneller ist eine Diskussion vorbei ... :D

    Aber mal im Ernst ...

    Zitat
    ... unabhängig davon ist die MySQL-Konsole eher unverzeihlich.

    Von welcher "MySQL-Konsole" sprichst Du denn? MySQL per Command Line? Ich meinte aber Tools wie z.B. phpMyAdmin. Da haben wir wohl aneinander vorbei geredet, oder?

    Wenn wir aber z.B. von phpMyAdmin reden, dann ist nach meinen persönlichen Erfahrungen das Tool definitiv verzeihlicher als PHP (und das habe ich mehrfach getestet und es nicht in irgend einem Forum gelesen). Ich muss jedoch dazu sagen, dass es schon eine Weile her ist (rd. 1,5 Jahre) und welche Versionen es von PHP und phpMyAdmin waren, kann ich nicht mehr sagen.

    Und, sorry, da hatte ich nun mal die größten Abweichungen hinsichtlich der Eingabe von Quotes ... Fakt ist jedenfalls, dass PHP und "MySQL-Tools" (selbst wenn sie auch auf PHP basieren) i.d.R. verschieden interpretieren, was somit auch zu unterschiedliche Ergebnisse führen kann. Dies wiederum kann für den Anwender sehr verwirrend sein ... ich wollte lediglich die Aufmerksamkeit bzgl. dieser Tatsache (insbesondere bei 0815) schärfen.

    Gruß, Ingo

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Und, 0815? Wie sieht´s aus? Hinbekommen?

    Gruß, Ingo

    0815

    • Viel Schreiber
    • Beiträge: 905
    Leider nicht!  :’-(

    Für'n SQL-Anfänger ist das 'nen Tick zu anspruchsvoll.
    Werde heute Nacht aber nochmal ein paar Versuche wagen.

    Wenn ich nur wüsste, ob es überhaupt mit einem JOIN lösbar ist, oder doch mit einem Subselct, oder mit was ganz Anderem? :nixweiss:

    John_Delay

    • Mitglied
    • Beiträge: 124
    • Geschlecht:
    Also meiner Meinung nach kann man das sowohl mit SubSelect als auch mit JOINS als auch ganz ohne beides lösen (WHERE-statements sind im Prinzip ja auch nichts anderes als INNER JOINS) ...

    Sag mal, kann man sich das auch mal ansehen? Gibt´s einen Link? Die Seite ist doch online ... Kannst Du mir auch per PN schicken, wenn Du es hier nicht schreiben willst.

    Gruß, Ingo

    0815

    • Viel Schreiber
    • Beiträge: 905
    Hi,

    ansehen ist leider nicht mehr möglich, denn ich habe wegen der vielen Ausfälle durch meine Try & Error Programmiertechnik bereits auf offline umgestellt. Zu sehen war da aber auch nicht viel.

    -Ohne p2c.products_id im Select wird für jeden im Shop auch nur mit wenigstens einem Produkt verlinkten Hersteller genau ein zugehöriges Logo angezeigt.

    -Mit p2c.products_id im Select wird für jeden im Shop auch nur mit wenigstens einem Produkt verlinkten Hersteller auch das zugehörige Logo angezeigt, allerdings mehrfach. D.h. für jedes verlinkte Produkt dieses Herstellers genau 1x. Gibt also immer eine riesige Liste, obwohl es z.B. eigentlich nur 5 Hersteller betrifft.

    Ohne p2c.products_id im Select stimmt also die Anzeige der Logos, allerdings kann ich dann nicht ermitteln, bzw. für die weitere Verwendung auswerten, welche Produkte (sollen ja nur die im Shop verlinkten sein) beim Klick auf das Logo des Herstellers angezeigt werden sollen.

    Wie die SQL-Abfrage(n) zu stricken ist (sind), damit beide Optionen einwandfrei funktionieren, hat sich mir bisher noch nicht erschlossen. Kann sein, dass es total simpel ist (mit JOIN, oder Subselect), aber vielleicht auch nur mit einem Befehl den ich bisher unter Umständen noch gar nicht kenne.

    Ein Freund, der sich besser mit SQL auskennt liegt zur Zeit leider auf den Kapverden am Strand und mir brennt's unter den Nägeln, weil ich mich an so etwas gerne verbeiße.

    3 Antworten
    2599 Aufrufe
    25. April 2014, 12:56:57 von möCöm
    2 Antworten
    1992 Aufrufe
    25. November 2012, 20:14:28 von NicoDeluxe
    3 Antworten
    2716 Aufrufe
    22. Dezember 2010, 12:14:33 von Ello
    8 Antworten
    5063 Aufrufe
    14. Juli 2018, 15:51:34 von hpzeller