Ankündigung

Einklappen
Keine Ankündigung bisher.

Benutzer eingabe über options form (submit)

Einklappen

Neue Werbung 2019

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

  • #16
    Guten Mittag.. hab die ganze Nacht drüber nach gedacht und jetzt leuchtet es mir solangsam mit dem "join" ein. Hab heute vor der Arbeit ein bisschen Rum geschrieben und es hat geklappt... Werde trotzdem heute abend die DB mal Posten und dann mein neues Problem zu beschreiben...

    Mahlzeit

    Kommentar


    • #17
      Zitat von Publichero Beitrag anzeigen
      gibt es eine möglichkeit meine db in sqlfiddle einzukopieren oder muss ich sie komplett "neu schreiben"?

      wenn ja wie bekomme ich das hin ?
      Um die Tabellenstruktur zu kopieren : SHOW CREATE TABLE
      Du müsstest auch einen kompletten SQL Export von phpMyAdmin pasten können (dieser enthält neben den CREATE statements dann auch INSERTs für die Daten)
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #18
        Abend, habe jetzt mal meine DB exportiert und eingefügt in "sqlfiddle" das kam bei raus:



        -- phpMyAdmin SQL Dump
        -- version 4.6.6
        -- https://www.phpmyadmin.net/
        --
        -- Host: localhost
        -- Erstellungszeit: 28. Jan 2017 um 01:41
        -- Server-Version: 5.7.16-log
        -- PHP-Version: 7.0.9

        SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
        SET time_zone = "+00:00";


        /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
        /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
        /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
        /*!40101 SET NAMES utf8mb4 */;

        --
        -- Datenbank: `bz`
        --

        -- --------------------------------------------------------

        --
        -- Tabellenstruktur für Tabelle `bookings`
        --

        CREATE TABLE `bookings` (
        `booking_no` int(11) NOT NULL,
        `stud_id` int(11) NOT NULL,
        `seat_id` int(11) NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        -- --------------------------------------------------------

        --
        -- Tabellenstruktur für Tabelle `classes`
        --

        CREATE TABLE `classes` (
        `seat_id` int(11) NOT NULL,
        `seat_name` varchar(255) NOT NULL,
        `class_type` varchar(255) DEFAULT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        --
        -- Daten für Tabelle `classes`
        --

        INSERT INTO `classes` (`seat_id`, `seat_name`, `class_type`) VALUES
        (1, 'A 1', 'Preschool'),
        (2, 'A 2', 'Preschool'),
        (3, 'A 3', 'Preschool'),
        (4, 'A 4', 'Preschool'),
        (5, 'A 5', 'Preschool'),
        (6, 'B 1', 'Preschool'),
        (7, 'B 2', 'Preschool'),
        (8, 'B 3', 'Preschool'),
        (9, 'B 4', 'Preschool'),
        (10, 'B 5', 'Preschool'),
        (11, 'C 1', 'Preschool'),
        (12, 'C 2', 'Preschool'),
        (13, 'C 3', 'Preschool'),
        (14, 'C 4', 'Preschool'),
        (15, 'C 5', 'Preschool'),
        (16, 'D 1', 'Middleschool'),
        (17, 'D 2', 'Middleschool'),
        (18, 'D 3', 'Middleschool'),
        (19, 'E 1', 'Middleschool'),
        (20, 'E 2', 'Middleschool'),
        (21, 'E 3', 'Middleschool');

        -- --------------------------------------------------------

        --
        -- Tabellenstruktur für Tabelle `students`
        --

        CREATE TABLE `students` (
        `stud_id` int(11) NOT NULL,
        `stud_name` varchar(255) NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

        --
        -- Indizes der exportierten Tabellen
        --

        --
        -- Indizes für die Tabelle `bookings`
        --
        ALTER TABLE `bookings`
        ADD PRIMARY KEY (`booking_no`),
        ADD UNIQUE KEY `stud_id` (`stud_id`),
        ADD UNIQUE KEY `seat_id` (`seat_id`);

        --
        -- Indizes für die Tabelle `classes`
        --
        ALTER TABLE `classes`
        ADD PRIMARY KEY (`seat_id`),
        ADD UNIQUE KEY `seat_name` (`seat_name`);

        --
        -- Indizes für die Tabelle `students`
        --
        ALTER TABLE `students`
        ADD PRIMARY KEY (`stud_id`),
        ADD UNIQUE KEY `stud_name` (`stud_name`);

        --
        -- AUTO_INCREMENT für exportierte Tabellen
        --

        --
        -- AUTO_INCREMENT für Tabelle `bookings`
        --
        ALTER TABLE `bookings`
        MODIFY `booking_no` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
        --
        -- AUTO_INCREMENT für Tabelle `classes`
        --
        ALTER TABLE `classes`
        MODIFY `seat_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=22;
        --
        -- AUTO_INCREMENT für Tabelle `students`
        --
        ALTER TABLE `students`
        MODIFY `stud_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
        --
        -- Constraints der exportierten Tabellen
        --

        --
        -- Constraints der Tabelle `bookings`
        --
        ALTER TABLE `bookings`
        ADD CONSTRAINT `bookings_ibfk_1` FOREIGN KEY (`stud_id`) REFERENCES `students` (`stud_id`),
        ADD CONSTRAINT `bookings_ibfk_2` FOREIGN KEY (`seat_id`) REFERENCES `classes` (`seat_id`);

        /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
        /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
        /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


        aber ich bin jetzt schon viel weiter und wie ihr bestimmt längst gemerkt habt habe ich wie von euch geraten meine DB neu strukturiert und benannt. Der tipp (Fremdschlüssel ) und das vermeiden von Redundanz ,( was mein code auch nochmal sehr verändert hat und mich zu "join " brachte ) waren sehr hilfreich.

        Wie ich meine Freien schüler oder sitze anzeigen kann habe ich auch jetzt geschnallt und umgesetz. Jetzt häng ich an einem kleinen problem.


        $res = mysqli_query($con,"SELECT classes.seat_id, classes.seat_name, classes.class_type FROM classes
        LEFT JOIN bookings ON (bookings.seat_id = classes.seat_id)WHERE bookings.booking_no IS NULL AND class_type='Preschool' OR bookings.booking_no IS NOT NULL AND class_type='Preschool' ORDER BY seat_id ");



        $num = mysqli_num_rows($res);
        $bookings_null = "booking_no";
        if($num > 0)
        echo "";
        else
        echo "Keine Ergebnisse<br>";


        $header_printed = false;
        while ($dsatz = mysqli_fetch_assoc($res)){
        if ($header_printed === false) {
        ?>

        <tr>
        <th width="4%"><font color='black'>Seat Id</th>
        <th width="24%"><font color='black'>Seat</th>
        <th width="20%"><font color='black'>Seat Status</th>

        </tr>
        <?php

        $header_printed = true;
        }
        ?>

        <tr>
        <td><font color='black'><?php echo $dsatz["seat_id"];?></td>
        <td><font color='black'><?php echo $dsatz["seat_name"];?></td>
        <td ><font color='green'><?php
        if ($bookings_null == 0){
        echo "Frei";
        }
        else {
        while ($bookings_null != 0)
        {
        echo"<td ><font color='Red'>Belegt</td>";

        }
        }

        ?></td>

        Ich möchte das alle belgten sitze in der tabelle mit Belegt ausgegeben werden und all die freien sitze mit "frei".

        wenn ich mir nur eines anzeigen lasse sprich alle freien oder alle belegten, dann berücksichtigt er die bookingstabelle und filter somit die ausgabe. wenn ich aber das if else statement so schreibe zeigt er mir jedes mal alle datensätze mit dem Status "Frei" selbst die datensätze die nicht mal als frei deklariert werden dürften da ja der Bookings table zu berücksichtigen ist. was es nicht tut.

        Was mache ich falsch?

        schonmal danke im vorraus...

        Kommentar


        • #19
          Und dann fügst du das ganze (ich habs mal um den ...SET... Kram beschnitten, also wirklich nur Tabellen und Daten genommen) bei sql-fiddle ein und klickst auf Build Schema.
          Voilá wir können deine Datenbank sehen und benutzen: http://sqlfiddle.com/#!9/4d9f1bb/1
          Erstmal noch ein paar grundsätzliche Sachen:
          - einem SQL Statement solltest du eine gewisse Struktur verpassen, beispielhaft:
          PHP-Code:
          SELECT classes.seat_idclasses.seat_nameclasses.class_type FROM classes
          LEFT JOIN bookings ON 
          (bookings.seat_id classes.seat_id)WHERE bookings.booking_no IS NULL AND class_type='Preschool' OR bookings.booking_no IS NOT NULL AND class_type='Preschool' ORDER BY seat_id 
          wird zu:
          PHP-Code:
          SELECT classes.seat_idclasses.seat_nameclasses.class_type FROM classes
          LEFT JOIN bookings
          ON 
          (bookings.seat_id classes.seat_id)
          WHERE bookings.booking_no IS NULL
            
          AND class_type='Preschool'
            
          OR bookings.booking_no IS NOT NULL
            
          AND class_type='Preschool'
          ORDER BY seat_id 
          Da können wir alle (auch du selbst) direkt viel besser sehen was passiert.
          - du hast hier schon einiges gelernt, dann empfehle ich dir direkt noch auf "Prepared Statements" und damit im Zusammenhang am besten PDO als Datenbankschnittstelle umzusteigen. Beispielhafter Kurzeinstieg -> http://www.peterkropff.de/site/php/pdo.htm und bei prepared Statements ist der Manual Eintrag wunderbar: http://php.net/manual/de/pdo.prepared-statements.php
          - beachte das E(ingabe)V(erarbeitung)A(usgabe)- Prinzip, mehr dazu findest du in der Wissenssammlung hier im Forum oder wenn du nach EVA googlest. Für dich konkret heißt das, klare Trennung von Verarbeitungs und Ausgabelogik. (Das mag dir bei diesem "kleinen" Beispiel nach unnötigem Overhead vorkommen, aber sobald das ganze etwas größer wird, vielleicht 200-300 Zeilen wirst du mir danken.)
          - Die Sachen hier:
          PHP-Code:
          <font color='Red'>
          <
          th width="20%"><font color='black'
          sind sowas von 20. Jahrhundert. - Im Ernst, Style gehört in css-Dateien und nicht direkt in html.
          - und hier setzt du bitte geschweifte Klammern:
          PHP-Code:
          if($num 0)
          echo 
          "";
          else
          echo 
          "Keine Ergebnisse<br>"
          wird zu:
          PHP-Code:
          if($num 0) {
              echo 
          "";
          } else {
              echo 
          "Keine Ergebnisse<br>";

          - zu guter letzt, hier im Forum PHP-Tags benutzen, dann können wir Code auch ordentlich lesen.

          Arbeite erstmal diese Liste an Grundlagen durch, dann würde ich darauf wetten das sich dein Problem in Luft auflöst. Ansonsten melde dich danach nochmal, mit deiner aktualisierten Variante.

          Kommentar


          • #20
            bin gerade mal darauf gekommen $booking_null zu echoen die ausgabe zeigte mir warum der code nicht funzt. war eine dummer versuch.. kann jemand helfen.. bin ich gedanklich weit weg von der lösung?

            Update : ok, thx.. hab browser nicht aktualisiert..sorry

            Kommentar


            • #21
              Wieder einmal vielen dank werde ich tun..gn8

              Kommentar

              Lädt...
              X