So verknüpfen Sie in CodeIgniter eine Tabelle mit einer anderen, wenn ein Spaltenwert in einer anderen Spalte gefunden wPhp

PHP-Programmierer chatten hier
Anonymous
 So verknüpfen Sie in CodeIgniter eine Tabelle mit einer anderen, wenn ein Spaltenwert in einer anderen Spalte gefunden w

Post by Anonymous »

Ich bin mir nicht sicher, ob dies ein Problem mit MVC, MySQL oder Arrays ist.
Situation: 2 MySQL-Tabellen
  • Tabelle Daten: ID, Titel, Liste
  • Tabelle Werte: ID, Name
Abfrage der Die Daten-Tabelle führt zu einem Array wie dem folgenden (Auszug):

Code: Select all

[4] => Array
(
[id] => 3
[title] => Foo
[list] => 1,2,3,4,6,14
)
[5] => Array
(
[id] => 4
[title] => Bar
[list] => 2,6,9,12
)
Das Feld list enthält durch Kommas getrennte Werte, die einigen IDs der Tabelle values entsprechen, z. B.

Code: Select all

[3] => Array
(
[id] => 12
[name] => 'value12'
)
Was ich für jede Zeile versuche, ist:
  • Nimm die Liste-Werte und zerlege sie in ein Array
  • Überprüfe mit der Ergebnismenge aus der Werte-Tabelle (über die in_array()-Methode)
  • Gib die Namenswerte der IDs zurück, wenn
  • sie irgendwie einschließt in die Hauptergebnismenge (z. B. als zweidimensionales Array):

Code: Select all

[5] => Array (
[id] => 4
[title] => Bar
[list] => Array (
[0] => value6
[1] => value12
...
)
)
Mein bisher naiver Ansatz bestand darin,
  • eine Abfrage für jede der beiden Tabellen auszuführen
  • die beiden Ergebnismengen über in_array zu vergleichen
Mein Hauptproblem (beim Versuch, Modell, Controller und Ansicht strikt zu trennen): Wie kann ich das Namensfeld aus der Wertetabelle in die „Hauptschleife“ der einbinden? Daten Tabellenergebnissatz?

Code: Select all

if ($q->num_rows() > 0) {
$data[] = $q->result_array();
foreach ($q->result() as $row) {
$data[] = $row;
}
return $data;
}
Wenn ich den folgenden (umständlichen) Ansatz verwende, erhalte ich natürlich jedes Mal ein neues Element:

Code: Select all

foreach ($q->result_array() as $row) {
$data[]['id'] = $row['id'];
$data[]['title'] = $row['title'];
$data[]['list'] = $row['year'];
}
Da es sich um eine MySQL-Datenbank handelt, sehe ich keine Möglichkeit, die Explosion und den Vergleich in SQL durchzuführen (mit LIKE oder etwas anderem).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post