danke für deine Ausführung und dein Verständnis für meine Idee.
Gerne.
Wenn es dazu auch zukünftig ausformulierte Anfragen und vollständigere Code-Happen gibt, würde das Erarbeiten einer Lösung auch schneller vonstatten gehen können
Icke hat geschrieben: Sa 28.Okt, 2023 16:19[...]
Jetzt muss nur noch jedes Zahlenfeld einen Ort ausgeben.

Ähm, wäre es nicht besser, erst das Datenmodell wie in meinem letzten Beitrag genannt umzubauen, bevor man eine solche Abfrage erstellt?
Ich gehe jetzt nicht ins Detail, um für Dein aktuelles Datenmodell die Ortsnamen abzufragen, welche ich auch an Deiner Stelle besser in einer DB-Tabelle und nicht in einer Datei speichern würde.
Allein schon daher, da ich Dein Datenmodell nicht kenne und Dein aktuelles Datenmodell nach Deinen bisherigen Ausführungen auch für wenig sinnvoll halte (dazu weiter unten mehr).
Hier zunächst das vereinfachte
SQL-Beispiel für Deine Anfrage:
Code: Alles auswählen
$sql = "SELECT id, ortsname FROM orte
WHERE id IN " . (string) $vorkommen;
Da muss natürlich noch die Variable $vorkommen zur Absicherung maskiert werden (hatten wir bereits an anderer Stelle ausgiebig behandelt) und die Feld- und Tabellennamen wären auf Dein Datenmodell anzupassen.
Und nein:
Man kann innerhalb einer SQL-Abfrage nicht ein Feldinhalt "zerlegen" und die somit "gewonnenen" Werte mit einer anderen Tabelle logisch verknüpfen.
Dazu wäre entweder eine in der DB gespeicherte Funktionen oder eben die nachträgliche Abfrage und Zuordnung der Detaildaten (hier: Ortsnamen) mit einer zweiten Abfrage im Script nötig. Beides kostet Zeit und wäre unnötig, wenn man eine Untertabelle erstellt und diese logisch mit der Haupttabelle verknüpft.
Situation fehlender Ort
An dieser Stelle von mir etwas zum Nachdenken, um das Dilemma mit Deinem Datenmodell besser zu verdeutlichen:
Bitte in Ruhe durchlesen, bevor wir hier weitermachen!
Du hast in einem Datensatz z. B. 5 Vorkommen gespeichert, also 5 Zahlen im Feld "vorkommen", mit Kommata getrennt.
Was passiert, wenn davon eine Zahl in der Tabelle für die Ortsnamen nicht vorhanden ist, die Zahl also entweder falsch eingetragen oder der Ort nachträglich gelöscht wurde?
Mit Deiner "Idee" wäre im Script dieses auf jeden Fall abzufangen, um ein "leeres" Feld in der Darstellung auf der Webseite zu vermeiden.
Man könnte allerdings erst nach Abfrage der IDs für die Ortsnamen
und der daraufhin abgefragten Ortsnamen im Script mit der "Korrektur" der Daten durchführen, würde also bereits unnötig falsche Daten aus der Datenbank abfragen; welche zudem auch unnötig Speicherplatz belegen würden.
Wohlgemerkt:
Das geschieht für jeden einzelnen Besucher Deiner Webseite. Bei wachsender Besucherzahl würden die zusätzlichen Aktionen zur Datenkorrektur im gleichen Maße ansteigen und Performanceeinbußen nach sich ziehen können; von anderen möglichen Nachteilen mal ganz abgesehen.
Mit einer Untertabelle wäre das Problem logisch gesehen so nicht vorhanden:
Werden die ID's aus der Untertabelle für die "Vorkommen" mit den Orten aus der "Orte"-Tabelle in einer Abfrage verknüpft abgefragt, werden falsche Zahlen nie mit aus der DB ausgelesen. Die Abfrage liefert also damit immer ein fehlerfreies Ergebnis, welche auch Deine Webseite nicht unnötig verlangsamen würde.
Und es geht noch weiter:
Ein nachträgliches Löschen eines Ortes (lassen wir an dieser Stelle die Notwenigkeit dazu mal unbeantwortet) könnte auch gleich alle betreffenden Datensätze in der "vorkommen"-Untertabelle mit entfernen.
Dafür wäre letztlich eine einfache SQL-Anweisung nötig, um sogleich auch alle Hauptdatensätze mit einem Schwung zu aktualisieren.
Die Ausführung kann nur gemessen werden, wogegen die Korrektur von zusammengeketteten ID-Werten in einem DB-Feld spürbar sein könnte.
Und diese Korrekturen wären auch immer für
alle Datensätze nötig.
Des Weiteren kann man auch nicht auf eine ID als Teil eines Text-Feldes referenzieren, um die betreffenden Datensätze korrekt einzugrenzen.
Beispiel? Gerne:
1. Datensatz: 1,2,3,100
2. Datensatz: 100,200,3
3. Datensatz: 1
Hier wäre die Abfrage nach ID "1" nicht sicher nur im ersten und dritten Datensatz zu finden, da die "1" auch in der "100" im zweiten Datensatz steckt.
Mit dem Suchwert "1," (also 1 mit Komma) könnte man aber auch nicht abfragen, denn das würde den 3. Datensatz wiederum ausklammern.
Und das wäre nur wenige von vielen Vorteilen für verteilte und logisch verknüpfte Tabellen, welche man durch eine relationale Datenbank nutzen kann und sollte.

Ich würde also an Deiner Stelle Deine "Idee" noch einmal stark überdenken.