Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Join oder nicht join (kompexe SQL Abfrage)

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Join oder nicht join (kompexe SQL Abfrage)

    Hallo. Ich hab da ein düsteres Problem bei dem ich hänge.

    Ich habe vier Tabellen, deren einzige Gemeinsamkeit das Feld "unit_id" ist.

    Ich möchte die Ergebnisse der Haupttabelle abfragen, sofern die weiteren Suchparameter mit den anderen drei Tabellen übereinstimmen.

    Tabelle 1 MAINOBJECTS als define enthält die Daten die ich brauche (Ferienwohnungen)

    Tabelle 2 AVAIL als define, enthält Zeiträume in denen die Fereinwohnungen aus Tabelle 1 verfügbar sind

    Tabelle 3 OFFERS als define, gibt aus um was für ein Objekt es sich handelt

    Tabelle 4 SEASON als define, enthält die entsprechenden Mietpreise.

    Ich habs schon mit einfachen Joins versucht.

    Also z.B.
    PHP-Code:
    SELECT *,MAINOBJECTS.unit_id as manid,AVAIL.unit_id as availid,SEASON.unit_id as seasonid,OFFERS.unit_id as offersid where AVAIL.feldwert=blah and SEASON.feldwert=blub usw usw 
    Dabei erhalte ich viele Ergebnisse, wobei availid, seasonid, mainid usw. fast nie übereinstimmen.

    group by unit_id (oder auch group by MAINOBJECTS.unit_id usw. gibt überhaupt nichts zurück, rattert aber ewig. (90000 Einträge)

    Also habe ich mich in die JOINS eingelesen.

    Hier erhalte ich ebenfalls Ergebnisse, aber wie oben eben keine Zusammenhängenden.

    Ich habe jetzt zig Versuche durch und weiß nicht mehr weiter.

    Anbei mal der letzte, natürlich überhaupt nicht funktionierende Grüppelcode mit der Hoffnung, dass mir hier jemand helfen kann, bzw. mir einen Link nennen kann indem die Problematik beschrieben ist.

    Die SQL Dokus die ich gefunden habe behandeln maximal zwei Tabellen.

    PHP-Code:
    SELECT *,".MAINOBJECTS.".unit_id
         
    ,".SEASON.".unit_id 
         
    ,".AVAIL.".unit_id
         
    ,".OFFERS.".unit_id 
            
    FROM  
    (select from ".MAINOBJECTS."
     
    where ".MAINOBJECTS.".unit_location_country='".$_POST['country']."'".$area.$city.$sleep.$otyp.$volltext.$pers.$ocean.$sd.$skid.$loiped.$stars.")a,
    UNION ALL
                (
    SELECT ".AVAIL.".unit_id as availcalledid
                FROM 
    ".AVAIL."
                
    where ".AVAIL.".unit_id ".MAINOBJECTS.".unit_id and ".AVAIL.".unit_availability_year like '%".$year."%' and INSTR(".AVAIL.".unit_availability_year,'O')!=".$daynum.$realleft."
                
    )b,
    UNION ALL
               
    SELECT ".SEASON.".unit_id as seasoncalledid
                FROM 
    ".SEASON."
                
    where  ".SEASON.".unit_id ".MAINOBJECTS.".unit_id ".$pricer."
                
    )c,
    UNION ALL
                
    (SELECT ".OFFERS.".unit_id as offerscalledid
                FROM 
    ".OFFERS." where ".$top."
    )d

               



    Danke im Vorfeld


  • #2
    Code:
    SELECT
       *,
       MAINOBJECTS.unit_id as manid,
       AVAIL.unit_id as availid,
       SEASON.unit_id as seasonid,
       OFFERS.unit_id as offersid 
    where
       AVAIL.feldwert=blah 
       and SEASON.feldwert=blub usw usw
    Da fehlt das FROM.
    .................................................. .....................................





    http://sqlfiddle.com Sind Beispieldaten möglich?
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Das war dahingetippt. In der Ursprünglichen war das FROM schon drin.

      Wie gesagt. Gab ja viele Einträge Fehlerlos aus. Aber eben nicht die auf die unit_id bezogenen.

      Und ich suche eben eine Möglichkeit, vier Tabellen mit unterschiedlichen select Anweisungen so auzulesen, dass die Hauptabfrage mit nur die Einträge zurückliefert, in denen die Unit_id immer die selbe ist und alle Bedingungen erfüllt sind.

      Kommentar


      • #4
        Jo, ist möglich.

        http://sqlfiddle.com Sind Beispieldaten möglich?
        Relax, you're doing fine.
        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

        Kommentar


        • #5
          Das glaube ich dir sofort.

          Ich will hier kein fertiges Script. Lösungsansatz oder wenigstens ein Link zu einer Doku in der mehr als nur zwei Tabellen bearbeitet werden würden mir schon reichen.

          Sorry. Link zu spät gesehen. Ich wurschtel da mal. Danke

          Edit:

          Hmm ja. Ganz ehrlich. Ist nicht ganz das was ich gesucht habe, da ich jetzt auf den ersten Blick überhaupt nicht mit der Fiddlegeschichte klar komme. Ich lese lieber und mach dann selber, als da erstmal einen Konfigurator zu lernen.

          Gibts da auch TUT's zum lesen?

          Kommentar


          • #6
            Mach einfach einen dump von den betroffenen Tabellen, öffne den Spaß im Texteditor, kopier die 'create table'-Passagen ins fiddle, füg noch ein paar inserts hinzu und drück auf 'build schema'.
            Dann poste den Link hier, damit wir uns ein Bild von der Situation machen können.

            Zum Lernen: http://www.peterkropff.de/site/mysql/joins.htm

            Die Anzahl der Joins ist dabei nebensächlich, du musst nur drauf achten, dass deine konditionalen Statements dem erwünschten Ergebnis entsprechen.
            Relax, you're doing fine.
            RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

            Kommentar


            • #7
              Du meinst einen Dumb vom Aufbau? Denn der komplette Dumb einer Tabelle beträgt so runde 800MB.

              Gibts nicht irgendeinen Link wo das so erklärt wird? Ich meine irgendwie habt ihr das ja auch gelernt.

              Wäre mir lieber.

              Kommentar


              • #8
                Mit "IN" geht es.

                Also
                PHP-Code:
                "select from blah where unit_id in (select distinct unit_id from blub where blahblah)" 
                Allerdings dauert die Anfrage da ewig. Gibt es da keine besseren Möglichkeiten?

                Das dumich nicht falsch verstehst. Das mit dem dunpen bei jsfiddle, dann hier posten usw. ist ein nettes Angebot. Aber ich bin mir sicher, dass es hier auch jemanden gibt, der da einen Link oder Beispiele hat wo man sich einlesen kann.

                Das dumpen, dann inserts reinmachen usw. dauert unterm Strich wahrscheinlich länger als hier einen entsprechenden Absatz durchzulesen.

                Ich habs ja fast. Wills nur noch verbessern.

                Kommentar


                • #9
                  Okay. Ist erledigt. Laut sql Doku (man sollte alles lesen ) geht eine solche Abfrage nicht.

                  Ich habs jetzt anders gelöst.

                  Dennoch Danke

                  Kommentar


                  • #10
                    Sorry aber: Bullshit.

                    Wenn du mal vernünftige Infos geben würdest, könnte man auch helfen. Wem sollen denn deine zerstückelten Bullshit-Beispiele irgend etwas sagen?

                    Das dumpen, dann inserts reinmachen usw. dauert unterm Strich wahrscheinlich länger als hier einen entsprechenden Absatz durchzulesen.
                    1. Der Dump dient nur dem Zweck, dass du das create-Statement nicht verfälschst. Gerne kannst du das auch in 1 Minute pro Tabelle zusammen tippseln.
                    2. 5 Datensätze pro Tabelle würden schon reichen.
                    3. Es gibt keinen Absatz: 'So verbindet man diese 4 Tabellen mit genau jenen spezifischen Anforderungen', da geht es um Verständnis für Relationen

                    Laut sql Doku
                    Source?
                    Relax, you're doing fine.
                    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                    Kommentar


                    • #11
                      Ich hab hier die SQL (oder eine) PDF rumliegen.

                      Da steht Sinngemäß (ist ja alles Englisch), das man zwar zig Tabellen miteinander verschachteln kann und somit eine Virtuelle Tabelle erstellt) aber die Anfragen je Tabelle auf 9 Abfragen je Spalte/ Tabelle begrenzt sind.

                      Somit fällt das für mich flach. In einer Tabelle habe ich bis zu 28 Abfragen.

                      Kommentar


                      • #12
                        Nochmal (Sorry, dass ich das jetzt nicht als Edit bringe, aber das hier dauert länger und hier ist ja der Edit Zeitlich begrenzt) um vieleicht doch noch Infos zu bekommen, die über die PDF gehen. (Kann ja sein. Die PDF ist 2 Jahre alt)

                        Es geht um 4 Tabellen

                        (ich bin nicht so der Grafikgeek was | und -- anbelangt um hier jetzt nett was hinzuzaubern. Vielleicht bring ich dennoch rüber was ich meine)

                        Tabelle 1 Hautptabelle
                        PHP-Code:
                        unit_id=123
                        titel
                        ='Ich bin das Haus mit der ID 123

                        unit_id=1234
                        titel='
                        Ich bin das Haus mit der ID 1234

                        unit_id
                        =12345
                        titel
                        ='Ich bin das Haus mit der ID 12345 
                        Tabelle 2 Verfügbarkeiten

                        PHP-Code:
                        unit_id=123
                        avail
                        ='Ich bin vom 01.01.2015 bis 12.01.2015 verfügbar

                        unit_id=1234
                        avail='
                        Ich bin vom 08.01.2015 bis 23.04.2015 verfügbar

                        unit_id
                        =12345
                        avail
                        ='Ich bin vom 12.12.2015 bis 01.04.2016 verfügbar 

                        Tabelle 3 Preise

                        PHP-Code:
                        unit_id=123
                        preisvon
                        =300
                        preisbis
                        =1500

                        unit_id
                        =1234
                        preisvon
                        =700
                        preisbis
                        =2500

                        unit_id
                        =12345
                        preisvon
                        =200
                        preisbis
                        =2000 
                        Ganz vereinfacht. So hätte ich es wahrscheinlich tatsächlich in einer Minute hinbekommen.

                        Tatsächlich gibt es aber weitaus mehrere Spalten die abzufragen sind.

                        Bei den Verfügbarkeiten muss ich z.B. den Anreisetag und die vom User gewählte Reisedauer prüfen. Zusätzlich kann der User noch zig andere Parameter in die Suche eingeben.

                        Normale Suche : 10 Abfrageparameter

                        Erweiterte Suche 30 Abfrageparameter

                        Also, klar. Wenn da einer eine Lösung hat bin ich Dankbar. Bisher habe ich es so gelöst, dass ich zunächts nach den Pflichteingaben sortiere und dann entsprechend der anderen Abfragen die ID's überprüfe. Was absolut nicht das gelbe vom Ei ist.

                        Hier im Beispiel sind es nur drei Tabellen.

                        Im eigentlichen Post sprach ich von vier Tabellen.

                        Tatsächlich sind es 6 Tabellen.

                        Nein ich konnte die Tabellen nicht irgendiwe zusammenfassen, da die Spaltenanzahl je Tabelle begrenzt ist.

                        Kommentar


                        • #13
                          Joins dienen dazu die Datensätze, wie du schon sagtest, aus den verschiedenen Tabellen zu einem großen zu machen. Deine Join-Klausel für diese Tabellen wäre 'unit_id = unit_id'.
                          Die restlichen Parameter kannst du in der WHERE-Klausel abarbeiten.
                          Relax, you're doing fine.
                          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                          Kommentar


                          • #14

                            Kommentar


                            • #15
                              Die komplette Abfrage ist bestimmt mit nem einfachen JOIN + WHERE Construct abbildbar. Ohne Subselects nutzen zu müssen oder sonstiges. Aber nett dass du uns erklärst was SQL alles kann und uns dann sagst das DEIN spezieller Fall ja viel zu Kompliziert für das gammelige SQL ist.

                              Schönen Tag noch und viel Glück.
                              Zitat von derwunner
                              "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

                              Kommentar

                              Lädt...
                              X