Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Zeiträumen PHP und MySQL

Einklappen

Unconfigured Ad Widget

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

  • Problem mit Zeiträumen PHP und MySQL

    Hallo Leute,
    ich bin das erste mal hier und wollte hier mal eine frage stellen mit der ich mich aussernander setze und zur keiner lösung komme.

    ich habe eine fahrzeuge tabelle in der eine generelle verfügbarkeitszeit drinne steht also z.B

    TABELLE FAHRZEUGE

    Fahrzeug ID = 1
    Fahrzeug NAME = TRALALA
    Verfügbar VON = 01.01.2008
    Verfügbar BIS = 31.12.2008

    der mysql aufruf dafür ist ja einfach aber nun kann man dieses fahrzeug für einen zeitraum mieten und dafür habe ich eine tabelle die ich vermietet nenne und diese sieht so aus

    TABELLE VERMIETET

    Fahrzeug ID = 1
    Vermietet VON = 02.03.2008
    Vermietet BIS = 13.03.2008

    wenn jetzt jemand eine suche startet mit von 28.02.2008 bis 17.03.2008 brauche ich einen mysql select der nur fahrzeuge ausgibt die in diesem zeitraum generell verfügbar sind und auch nicht innerhalb dieses zeitraums vermietet sind.

    ps: für meine zeitfelder benutzer ich interger-felder die mit timetamps gefüllt sind.
    vg
    xavie


  • #2
    Hmm vllt. gehts mit LIMIT 0 oder so..

    also
    PHP-Code:
    SELECT FROM mieten Where Vermietet von $zeitraum LIMIT 0 
    Bin mir nicht sicher das der Code so stimmt ^^

    Kommentar


    • #3
      Wenn Deine MySQL Version ausreichend neu für Subqueries ist:
      Code:
      SELECT
        fahrzeuge.name  
      FROM
        fahrzeuge  
      WHERE
        Curdate() BETWEEN fahrzeuge.von AND fahrzeuge.bis
        AND NOT EXISTS (  
          SELECT    
            *      
          FROM    
            vermietet      
          WHERE    
            vermietet.fahrzeug_id = fahrzeuge.id
            AND Curdate() BETWEEN vermietet.von AND vermietet.bis
        )
      edit
      ps: für meine zeitfelder benutzer ich interger-felder die mit timetamps gefüllt sind.
      Oh, das ist mir jetzt zu kompliziert

      Kommentar


      • #4
        erstmal danke an david

        also das von david sieht schon sehr vielversprechend aus aber kann ich dem between anstadt curdate() 2 zeitangaben geben? wenn ja wie müsste das geschrieben werden? mit einem komma?

        es wird ja immer nach einem zeitraum und keinem zeitpunk gesucht.
        vg
        xavie

        Kommentar


        • #5
          Das könnte mit
          Code:
          SELECT
            fahrzeuge.name  
          FROM
            fahrzeuge  
          WHERE
            {suche_von} BETWEEN fahrzeuge.von AND fahrzeuge.bis
            AND {suche_bis} BETWEEN fahrzeuge.von AND fahrzeuge.bis
            AND NOT EXISTS (  
              SELECT    
                *      
              FROM    
                vermietet      
              WHERE    
                vermietet.fahrzeug_id = fahrzeuge.id
                AND (
                  {suche_von} BETWEEN vermietet.von AND vermietet.bis
                  OR {suche_bis} BETWEEN vermietet.von AND vermietet.bis
                )
            )
          funktionieren.
          {suche_von} und {suche_bis} musst Du dann durch Deine Zeitangaben ersetzen.
          Wie das mit den Grenzen von
          AND (
          {suche_von} BETWEEN vermietet.von AND vermietet.bis
          OR {suche_bis} BETWEEN vermietet.von AND vermietet.bis
          )
          aussieht (also ob das so stimmt), kann ich Dir allerdings nicht aus dem Ärmel schütteln. Es ist nur eine Idee

          Kommentar


          • #6
            nochmals danke
            werde mal damit weiterarbeiten und spätestens morgen mal hier reinschreiben ob es funktioniert hat.
            vg
            xavie

            Kommentar

            Lädt...
            X