Datenbankeinträge sollen sich aufeinander beziehen

@Sempervivum Alles klar bzw. nicht so ganz was die Darstellungsreihenfolge betrifft.

Hier die Ergebnisse ohne den neuen Sortiercode - am Ende steht jeweils die id auf die sich der Eintrag bezieht:

6autortext6autor6autortext6autorname6autormail61



5autortext5autor5autortext5autorname5autormail5



4autortext4autor4autortext4autorname4autormail42



3autortext3autor3autortext3autorname3autormail31



2autortext2autor2autortext2autorname2autormail2



1autortext1autor1autortext1autorname1autormail1



Hier mit dem Sortiercode - beachte die drei Zeilen mit jeweils vier Punkten:


1autortext1autor1autortext1autorname1autormail1


6autortext6autor6autortext6autorname6autormail61


....


5autortext5autor5autortext5autorname5autormail5


2autortext2autor2autortext2autorname2autormail2


4autortext4autor4autortext4autorname4autormail42


1autortext1autor1autortext1autorname1autormail1


3autortext3autor3autortext3autorname3autormail31


....


2autortext2autor2autortext2autorname2autormail2


....


1autortext1autor1autortext1autorname1autormail1


Tja, die Zuordnung scheint so zu erfolgen, dass der referenzierende Eintrag über dem Originaleintrag steht und nicht darunter. Insoweit sind wir auf der richtigen Spur. Was die jeweils vier Punkte bedeuten ist mir überhaupt nicht klar. UPPS: Das sind quasi Leerstellen bei den Original-Einträgen die keine Referenz haben = id 1, id 2 und id 5.

MONI

PS Verdammt ich hab' schlecht geschlafen. Sorry.
 
Zuletzt bearbeitet:
Die mit den drei Punkten sind leer, wenn ich das richtig verstehe.

6 und 3 verweisen jeweils auf 1, das führt dazu, dass 1 verdoppelt wird. Ist das so gewünscht? 1 taucht am Schluss noch Mal auf, das ist nicht plausibel.

Poste doch mal bitte ein JSON von den Testdaten, damit ich es nachstellen kann, vor dem Umsortieren:
Code:
    // Ergebnis steht nach dem Auslesen aus der DB in $data
    echo json_encode($data, JSON_PRETTY_PRINT);
    $output = [];
    foreach ($data as $id => $row) {
        // Hat der Datensatz eine Referenz?
        if (isset($row['ref'])) {
            // Wir geben beide Reihen aus,
    // usw. mit dem Umsortieren
 
@Sempervivum Okay, warte ein wenig. Lass mich mal überlegen, ob es so nicht auch okay ist. Selbst wenn es von meinem ersten Vorhaben abweicht. Du hast mich auf eine neue Idee gebracht.

Durch die Verdoppelung oder sogar Verdreifachung steigt ja auch die Wertigkeit* von id 1:
Einmal der Originaleintrag und zweimal durch die Referenzierung.

* oder Häufigkeit

Hast Du eine Idee wie die vier Punkte erzeugt werden?

MONI
 
Zuletzt bearbeitet:
PS: Ich vermute da schon etwas: Dieses
Code:
if (isset($row['ref']))
prüft mit isset ob eine Referenz vorhanden ist. Vermutlich ist das bei den Daten aus der Datenbank immer true, wenn auch null oder Leerstring o. ä. Aber das müsste man sehen, wenn man sich das JSON ansieht.
 
Vermutlich ist das bei den Daten aus der Datenbank immer true, wenn auch null oder Leerstring o. ä.
Genau das ist es, gesetzt ja, aber kein Wert vorhanden. Ich würde es mal mit empty oder is_null versuchen.

Und noch ein Hinweis zu dem Script aus #1:

Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:

Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.
Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.
Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.
Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.


Und dieser echo-Marathon ist auch überflüssig, das bekommt man bei dieser Ausgabe mit einer Zeile hin:
PHP:
echo implode(" - ", $row) . "<hr>";
 
Mit

if(!empty

gehts. Mit diesem Ergebnis:


1autortext1autor1autortext1autorname1autormail1


6autortext6autor6autortext6autorname6autormail61


2autortext2autor2autortext2autorname2autormail2


4autortext4autor4autortext4autorname4autormail42


1autortext1autor1autortext1autorname1autormail1


3autortext3autor3autortext3autorname3autormail31


5autortext5autor5autortext5autorname5autormail5




MONI
 
Zurück