Hallo liebe Community,
ich komme leider nicht mehr aus eigener Kraft weiter und hoffe, dass Ihr mir helfen könnt.
Ich möchte eine Datenbankabfrage von 8 Datenbankfeldern aus mehreren Datensätzen machen.
Die Wörter sollen einfach nur hintereinander in einer Tabelle ausgeben werden.
JEDOCH sollen doppelte Wörter ignoriert und die Wörter alphabetisch ausgegeben werden.
Es dürfen also nachfolgende Wörter nur einmalig ausgegeben werden.
Bsp:
Ich habe folgendes ausprobiert:
Idee 1) Datenbankabfrage mit DISTINCT
Ergebnis: Funktionert. ABER DISTINCT ist nur auf eine Spalte je Abfrage anwendbar.
Die Idee, einfach 4 Selects mit einzelnden DISTRICTs zu machen, ging jedoch nicht.
Da kam mir nur die Array-Funktion in den Sinn...
Idee 2) Doppelte Einträge via array_unique aus einem Array löschen
Ergebnis: Was ich nicht wusste ist, dass das Skript ein mehrdimensionales Array anlegt
Die doppelten Wörter wurden zwar in den Datensätzen der Zeilen (Unter-Array) herausgefiltert, aber wurden nicht im Haupt-Array entfernt.
So bleiben z.B. die Wörter "Orangen" und "Möhren" doppelt in der Liste
Idee 3) Mehrere geschachtelte Funktionen
Ergebis: Das selbe wie bei Idee 2
Idee 4) Funktionen mit Schleifenabfrage
Ergebnis: Das selbe wie bei Idee 2
In meiner Verzweiflung bin ich kurz davor eine harte Textdatei oder Hilfstabelle anzulegen, in die Stringvariablen per implode() reingeschrieben
und wieder in ein nagelneues Array zurückgeschrieben wird. Blos das ist ja nun wirklich keine zufriedenstellende Lösung.
Kann mir jemand einen Tipp geben?
Vielleicht kann man das mehrdimensionale in ein eindimensionales Array umwandeln?
ich komme leider nicht mehr aus eigener Kraft weiter und hoffe, dass Ihr mir helfen könnt.
Ich möchte eine Datenbankabfrage von 8 Datenbankfeldern aus mehreren Datensätzen machen.
Die Wörter sollen einfach nur hintereinander in einer Tabelle ausgeben werden.
JEDOCH sollen doppelte Wörter ignoriert und die Wörter alphabetisch ausgegeben werden.
Es dürfen also nachfolgende Wörter nur einmalig ausgegeben werden.
Bsp:
PHP-Code:
ID spalte1 spalte2 spalte3 spalte4
1 orangen möhren weintrauben zitronen
2 birnen möhren möhren gurken
3 orangen kiwis äpfel birnen
Idee 1) Datenbankabfrage mit DISTINCT
PHP-Code:
$sql_spalten = mysql_query("SELECT DISTINCT spalte1, spalte2, spalte3, spalte4 FROM tab_obstgemuese");
Die Idee, einfach 4 Selects mit einzelnden DISTRICTs zu machen, ging jedoch nicht.
Da kam mir nur die Array-Funktion in den Sinn...
Idee 2) Doppelte Einträge via array_unique aus einem Array löschen
PHP-Code:
$sql_spalten = mysql_query("SELECT spalte1, spalte2, spalte3, spalte4 FROM obst_tab");
while($res_spalten = mysql_fetch_array($sql_spalten, MYSQL_ASSOC)){
$woerter_merged = array_merge($res_spalten[wort1], $res_spalten[wort2], $res_spalten[wort4], $res_spalten[wort4]);
$woerter_doppelte_raus = array_unique($woerter_merged);
$woerter_sortiert = ksort($woerter_doppelte_raus);
echo '<pre>';
var_dump($woerter_sortiert);
echo '</pre>';
//Ausgabe der Wörter in einer Tabelle
$spalten = 4;
$num=0;
for($x=0;$x<count($woerter_sortiert);$x++){
if ($num % $spalten == 0)// Neue Zeile beginnen
echo " </tr>\n </tr>\n";
echo"<td align=\"center\"><a href=\"#\"
onClick=\"window.opener.document.woerter.wort.value = '".$woerter_sortiert[$x] ."';window.close()\">". $woerter_sortiert[$x] ."</a></td>\n";
$num++;
}
}
Die doppelten Wörter wurden zwar in den Datensätzen der Zeilen (Unter-Array) herausgefiltert, aber wurden nicht im Haupt-Array entfernt.
So bleiben z.B. die Wörter "Orangen" und "Möhren" doppelt in der Liste
Idee 3) Mehrere geschachtelte Funktionen
PHP-Code:
$array_neu = array_values(array_unique(array_merge($res_spalten[wort1], $res_spalten[wort2], $res_spalten[wort4], $res_spalten[wort4])));
Idee 4) Funktionen mit Schleifenabfrage
PHP-Code:
$AlterArray = array_unique(array_merge_recursive($res_spalten[wort1], $res_spalten[wort2], $res_spalten[wort4], $res_spalten[wort4]));
$i = 0;
foreach($AlterArray as $Wert) {
$NeuerArray[$i] = $Wert;
$i++;
}
echo $NeuerArray;
In meiner Verzweiflung bin ich kurz davor eine harte Textdatei oder Hilfstabelle anzulegen, in die Stringvariablen per implode() reingeschrieben
und wieder in ein nagelneues Array zurückgeschrieben wird. Blos das ist ja nun wirklich keine zufriedenstellende Lösung.
Kann mir jemand einen Tipp geben?
Vielleicht kann man das mehrdimensionale in ein eindimensionales Array umwandeln?
Kommentar