Böses Böses SQL Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Böses Böses SQL Problem

    Hallo Zusammen

    Wahrscheinlich ist es ganz einfach zu lösen - aber ich bekomms einfach nicht hin!

    Und zwar sind aus zwei Verknüpften Tabellen (Preisliste/Hotels) 3 beliege Hotels mit dem zugehörigen minimalen Preis(d_zimmer) aus der Preislistentabelle zu selektieren.

    Meine Ansatz sieht derzeit so aus:

    PHP-Code:
    select hotels.id,ort,land,zielgebiet,hotelname,
    kategorie,pic1,zimmer1
    d_zimmerpro_objekt from preislistehotels 
    where hotels
    .id=preisliste.code and 
    veranstalter_ref='ET' 
    and online='ja' and homepage IN ('alle','texpo'
    group by hotels.id limit 3
    Dabei selektiert er allerdings nicht den minimalen Preis (kann er ja auch nicht). Jeder Versuch mit min() zu arbeiten ging irgendwie schief.

    Kann das damit zusammenhängen das die MySQL version 3.22 noch benutzt wird??

    Wäre echt super wenn mir jemand helfen könnte!

    Grüße Danjo

  • #2
    Ich habe den derzeitigen Ansatz einmal nach der "Join" Anleitung abgeändert:

    PHP-Code:
    SELECT t1.id,t1.ort,t1.land,t1.zielgebiet,
    t1.hotelname,t1.kategorie,t1.pic1,t1.zimmer1
    t2.d_zimmert2.pro_objekt FROM hotels t1 
    INNER JOIN preisliste t2 ON t1
    .id t2.code 
    Die will er überhaupt nicht annehmen:

    MySQL meldet:

    You have an error in your SQL syntax near 'INNER JOIN preisliste t2 ON t1.id = t2.code LIMIT 0, 30' at line 1

    Liegt das an der MySQL Version? Ich weiß einfach nicht mehr weiter...

    Kommentar


    • #3
      da fehlen jedenfalls mal die Klammern nach ON...
      Für Rechtschreibfehler übernehme ich keine Haftung!

      Kommentar


      • #4
        Re: Böses Böses SQL Problem

        Original geschrieben von danjo
        Hallo Zusammen

        Wahrscheinlich ist es ganz einfach zu lösen - aber ich bekomms einfach nicht hin!

        Und zwar sind aus zwei Verknüpften Tabellen (Preisliste/Hotels) 3 beliege Hotels mit dem zugehörigen minimalen Preis(d_zimmer) aus der Preislistentabelle zu selektieren.

        Meine Ansatz sieht derzeit so aus:

        PHP-Code:
        select hotels.id,ort,land,zielgebiet,hotelname,
        kategorie,pic1,zimmer1
        d_zimmerpro_objekt from preislistehotels 
        where hotels
        .id=preisliste.code and 
        veranstalter_ref='ET' 
        and online='ja' and homepage IN ('alle','texpo'
        group by hotels.id limit 3
        Dabei selektiert er allerdings nicht den minimalen Preis (kann er ja auch nicht). Jeder Versuch mit min() zu arbeiten ging irgendwie schief.

        Kann das damit zusammenhängen das die MySQL version 3.22 noch benutzt wird??

        Wäre echt super wenn mir jemand helfen könnte!

        Grüße Danjo
        also ich erkenne nirgendwo ein Feld, der mir Info über den Preis gibt, daher versuche ich mal so: (sei preisliste.preis die Spalte, welche Preise enthält)

        select a.*,b.* from hotels a inner join preisliste b on a.id=b.code where b.preis=(select c.preis from preisliste c where c.code=b.code order by preis asc limit 1) order by b.preis asc limit 3

        Ich kenne mich mit MySQL nicht aus, ich arbeite meist mit MSSQL daher bin ich mir nicht sicher mit dem "limit". In MSSQL würde das so aussehen:

        select top 3 a.*,b.* from hotels a inner join preisliste b on a.id=b.code where b.preis=(select top 1 c.preis from preisliste c where c.code=b.code order by preis asc) order by b.preis asc

        HTH

        Kommentar


        • #5
          Danke erstmal für die Antworten...

          Leider funktioniert das so nicht: Ich habe deine Lösung leicht abgeändert (mein Preis ist d_zimmer... anscheinend für Doppelzimmer - das stammt nicht aus meiner fehder )

          SELECT a. * , b. *
          FROM hotels a
          INNER JOIN preisliste b ON a.id = b.code
          WHERE b.d_zimmer = (
          SELECT c.d_zimmer
          FROM preisliste c
          WHERE c.code = b.code
          ORDER BY d_zimmer
          LIMIT 1 )
          ORDER BY b.d_zimmer
          LIMIT 3


          dann bringt er mir das hier:
          #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT c.d_zimmer
          FROM preisliste c
          WHERE c.code = b.code
          ORDER

          Hat noch irgendjemand eine Idee?

          Kommentar


          • #6
            Original geschrieben von danjo
            Danke erstmal für die Antworten...

            Leider funktioniert das so nicht: Ich habe deine Lösung leicht abgeändert (mein Preis ist d_zimmer... anscheinend für Doppelzimmer - das stammt nicht aus meiner fehder )

            SELECT a. * , b. *
            FROM hotels a
            INNER JOIN preisliste b ON a.id = b.code
            WHERE b.d_zimmer = (
            SELECT c.d_zimmer
            FROM preisliste c
            WHERE c.code = b.code
            ORDER BY d_zimmer
            LIMIT 1 )
            ORDER BY b.d_zimmer
            LIMIT 3


            dann bringt er mir das hier:
            #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT c.d_zimmer
            FROM preisliste c
            WHERE c.code = b.code
            ORDER

            Hat noch irgendjemand eine Idee?
            ja, hier (vielleicht liegs dran): ... WHERE b.d_zimmer = (SELECT c.d_zimmer
            FROM preisliste c
            WHERE c.code = b.code
            ORDER BY [color=red]c.d_zimmer[/color]
            LIMIT 1)

            und ausserdem niemals Leerzeichen (space) unmittelbar vor ) oder nach ( einbauen. Das sieht zwar schön aus, aber manche DBMS mögen es nicht

            Kommentar


            • #7
              @asp2php

              Danke für die Hilfe... Ganz so hats nicht geklappt - allerdings hab ichs auf umwegen jetzt hinbekommen!

              MySQL in der version 3.22 meckert mit der Methode ein bisschen rum - wir wohl langsam ein update fällig

              Danke nochmal
              Danjo

              Kommentar


              • #8
                @asp2php: Aufwachen ... es geht um MySQL 3.22 ... da gibt's keine SubSelects ...
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Original geschrieben von goth
                  @asp2php: Aufwachen ... es geht um MySQL 3.22 ... da gibt's keine SubSelects ...
                  wach selbst mal auf, ich sagte

                  Ich kenne mich mit MySQL nicht aus, ich arbeite meist mit MSSQL daher bin ich mir nicht sicher mit dem "limit". In MSSQL würde das so aussehen:

                  Kommentar


                  • #10
                    Nur dummerweise bringt Deine Hilfe dann keinen weiter .. auch wenn du drauf rumreitest .. !
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      @goth

                      Kennst du dann eine Lösung mit 3.22 konformen SQL mit dem man mein Problem "elegant" Lösen kann?

                      Kommentar


                      • #12
                        Original geschrieben von goth
                        Nur dummerweise bringt Deine Hilfe dann keinen weiter .. auch wenn du drauf rumreitest .. !
                        was ist MySQL ? Kenn' ich nicht

                        OK, ich wollte nur helfen, doch wenn ich noch nie mit MySQL zu tun habe, woher soll ich denn wissen, dass MySQL solche einfache Sachen nicht kann. Ich weiss nur dass MySQL kein SP unterstützt und das ist Grund genug für mich MySQL nicht einzusetzen. Sorry dass ich versucht habe zu helfen. Selbstverständlich können die Mod und Admin alle meine Beiträge dies bezüglich löschen, hab' nichts dagegen, da sie sowieso niemanden geholfen hat.

                        Have a nice weekend

                        Kommentar


                        • #13
                          Hallo danjo,

                          ich bin mir nicht sicher, ob ich genau verstanden habe was du möchtest. Willst du

                          A) 3 zufällige Hotels mit dem niedrigsten Preis des jeweiligen Hotels

                          oder

                          B) die drei billigsten Zimmer alle Hotels

                          ich vermute mal A) ... dann kannste du vielleicht folgendes machen: zuerst holst du dir drei zufällige hotels (nur die ID) diese kannst du dann als Bedingung (z.B. mit "in" wenn das geht oder sonst halt in der Where-Klausel) für eine zweite Abfrage benutzen ...

                          Kommentar


                          • #14
                            Hallo Patrick_PQ

                            Ja es ist wie in A) gemeint...

                            Allerdings wurde das ganze auch komplett überdacht so das die Problemstellung jetzt (zum glück ) eine andere ist:

                            Den minimalen Preis wird nun über ein gesondertes feld extra gepflegt - aus dem grund das auch über dieses extra Angebote eingestellt werden können.

                            Ich deine Lösung dennoch mal Probiert - ohne Erfolg:

                            SQL-Befehl :

                            select hotels.id,ort,land,zielgebiet,hotelname,

                            kategorie,pic1,zimmer1,

                            min(d_zimmer), pro_objekt from preisliste, hotels

                            where veranstalter_ref='ET'

                            and online='ja' and homepage IN ('alle','texpo')

                            and preisliste.code IN (SELECT code FROM preisliste, hotels where hotels.id=preisliste.code group by hotels.id limit 3) LIMIT 0, 30

                            MySQL meldet:

                            You have an error in your SQL syntax near 'SELECT code FROM preisliste, hotels where hotels.id=preisliste.code group by hot' at line 11


                            Ich merke anscheinend gerade, dass ich mir SQL nicht ganz so liegt...

                            Kommentar


                            • #15
                              nee, ich meinte auch zwei einzelne SQL-Anweisungen. Die erste liefert dir drei hotel.ids zurück und die setzt du in die zweite Anweisung als Bedingung ein. Etwa so:

                              qry1="select id from hotels order by random limit 3";
                              ausführen, Ergebnis mit $liste=implode("," ...) verbinden
                              qry2="select min(d_zimmer) from ... where hotels.id in ($liste) ..."
                              ausführen und Ergebnis ausgeben

                              Kommentar

                              Lädt...
                              X