Datensätze statt als Tabelle in einem "Accordion" ausgeben

fawin2

Benutzer
Beiträge
8
Hallo zusammen,

ich habe mir ein (zumindest für mich großes) Projekt vorgenommen.

Ich helfe ehrenamtlich in einer kleinen Bücherei. Die Ausleihen erfassen wir in einer mySQL-Datenbank.
Die Tabelle buecher sieht exemplarisch so aus:
Code:
Name         | Typ
-------------+------------
id           | int(11)
created      | datetime
name         | text
titel        | text
autor        | text

Mit PHP zeige ich momentan nur als Archiv eine lange (momentan ca. 2000 Datensätze in 2 Jahren) Tabelle an. Sortiert nach Name aufsteigend, danach nach ID absteigend, die aktuellste Ausleihe also zuerst.
PHP:
<?php

$db = mysqli_connect(host, user, passwort, name);

$sql = "SELECT * FROM buecher ORDER BY name ASC, id desc "

if ($erg = $db->query($sql)) {
    while ($datensatz = $erg->fetch_object()) {
        $daten[] = $datensatz;
    }
}

?>


<div>
    <table>
        <thead>
            <tr>
                <th>Name</th>
                <th>Datum</th>
                <th>Titel</th>
                <th>Autor</th>
            </tr>
        </thead>
        <tbody>
            <?php
    foreach ($daten as $inhalt) {
?><tr>
    <td><?php echo $inhalt->name; ?></td>
    <td><?php echo date("d.m.Y", strtotime($inhalt->created));?></td>
    <td><?php echo $inhalt->titel; ?></td>
    <td><?php echo $inhalt->autor; ?></td>
</tr>
<?php
}
?>
      </tbody>
    </table>

Das ganze sieht dann exemplarisch so aus
Code:
Name          | Datum      | Autor           | Titel          
--------------+------------+-----------------+------------------
Amtmann, Hans | 25.09.2022 | Stephen King    | Es
Amtmann, Hans | 12.07.2022 | Ingrid Noll     | Die Apothekerin
Amtmann, Hans | 05.03.2022 | Edgar Wallace   | Feuer im Schloß
Amtmann, Max  | 19.08.2022 | Henning Mankell | Tiefe
Amtmann, Max  | 26.01.2022 | Ken Follet      | Never
Daum, Klaus   | 12.12.2022 | Charlotte Link  | Die Suche
Daum, Klaus   | 02.05.2022 | Donna Leon      | Latin Lover
Meier, Ron    | 14.08.2022 | Enid Blyton     | Die drei ???
Meier, Ron    | 22.04.2022 | J.K. Rowling    | Harry Potter

Um das ganze nun übersichtlicher zu halten, würde ich die Tabelle nun gerne als ein "Accordion" umbauen.
Dazu möchte ich Bootstrap nutzen
Man sieht zunächst nur alle Namen, kann diese per Klick dann aufklappen und sieht dann eine Tabelle mit allen Ausleihen dieser Person. Die aktuellste Ausleihe oben.
Code:
|=================================================|
| Amtmann, Hans                               +   |
|=================================================|
| Datum        | Autor         | Titel            |
|--------------|---------------+------------------|
| 25.09.2022   | Stephen King  | Es               |
| 12.07.2022   | Ingrid Noll   | Die Apothekerin  |
| 05.03.2022   | Edgar Wallace | Feuer im Schloß  |
|=================================================|
|                                                 |
|=================================================|
| Amtmann, Max                                +   |
|=================================================|
| Datum        | Autor         | Titel            |
|--------------|---------------+------------------|
| 19.08.2022   | Hennig Mankel | Tiefe            |
| 26.01.2022   | Ken Follet    | Never            |
|=================================================|
|                                                 |
|=================================================|
| Daum, Klaus                                 +   |
|=================================================|
| Datum        | Autor         | Titel            |
|--------------|---------------+------------------|
| 12.12.2022   | Charlote Link | Die Suche        |
| 02.05.2022   | Donna Leon    | Latin Lover      |
|=================================================|
|                                                 |
|=================================================|
| Meier, Ron                                  +   |
|=================================================|
| Datum        | Autor         | Titel            |
|--------------|---------------+------------------|
| 14.08.2022   | Enid Blyton   | Die drei ???     |
| 22.04.2022   | J.K. Rowling  | Harry Potter     |
|=================================================|

Das es mehrere Personen mit dem gleichen Namen geben kann, lasse ich dabei mal außer Acht.

Es wäre toll wenn mir sagen würde, wie ich dieses Projekt angehen sollte.
Ich bin auf dem Gebiet Anfänger und habe Grundkenntnisse.

Vielen Dank und viele Grüße
 
Werbung:
mir fallt ein, auf der Homepage einfach nach jeder Person den HTML-Tag "<hr>" einbauen und nach den verliehenen Büchern ebenfalls.

wird aber zu abwegig, greift meiner Meinung nach eher nach HTML/PHP Lösung dazu.

weiteres würde ich lieber mit dir per PN angehen ;)
 
nach betrachten der Spoiler fällt mir auf, dass das Ganze zwar richtig, aber aufwendig strukturiert ist.
Ich würde:
1.: Eine Tabelle über Bücher.
Code:
create table bücher(id serial primary key, name text not null, autor text not null);
2.: Eine Tabelle über Kunden.
Code:
create table kunden(id serial primary key, name text not null);
3.: Eine Tabelle mit Verleih.
Code:
create table verleih(id serial primary key, buch integer references bücher(id), kunde integer references kunden(id));
4.: Ein paar Werte einfügen.
Code:
insert into kunden(name) values ('Hans Müller', 'Hans Peter');
insert into bücher(name, autor) values ('Es', 'Stiefelriemenbill');
insert into verleih(buch, kunde) values ((select id from kunden limit 1), (select id from bücher limit 1));
5.: Eine Test-Abfrage.
Code:
select * from verleih;
6.: Eine Abfrage, die den Zweck denke ich erfüllt.
Code:
select bücher.name, bücher.autor, kunden.name from verleih inner join bücher on (verleih.buch = bücher.id) inner join kunden on(kunden.id = verleih.kunde) group by kunden.name, bücher.name, bücher.autor;

alles andere betrifft HTML/PHP, sprich hier nicht wirklich am richtigen Fleck ;)

EDIT: Exclusion Constraint baue ich bisher nicht aus, weil das wiederum ein anderes SQL benötigt.
 
was @Kampfgummibaerlie Dir hier sagen will: Deine Tabelle ist so erst einmal für die Tonne. Du kannst nicht einmal erkennen, welche Bücher gerade verliehen sind. Da ist auch kein Schutz, daß ein und dasselbe Buch gleichzeitig an 42 Personen verliehen ist (das meint er mit Exclusion Constraint) und Du verstößt gegen die Regeln der Normalisierung (also z.B. Kunden in einer extra Tabelle erfassen, mit Anschrift etc.) und beim Verleih nur auf die ID referenzieren, so wie gezeigt.
Die Ausgabe als "Accordion" ist Aufgabe von PHP, siehe dazu z.B. Gruppenbruch / Gruppenwechsel · PHP.de Wissenssammlung ). Man kann das aber auch mit SQL machen, siehe ROLLUP und CUBE, aber ob MySQL das schon kann ist auch wieder fraglich.
 
Werbung:
Zurück
Oben