Mehrdimensionales Array "nach" erstem Array angezeigen?!

ev0lst

Erfahrenes Mitglied
Hallo.

Ich habe folgendes Problem.

Ich nutze ADODB und ziehe mit GetAll() alle nötigen Werte aus der DB.
Aus der Query kommt nun folgendes Ergebnis:

PHP:
Array
(
    [0] => Array
        (
            [module] => ADD
        )

    [1] => Array
        (
            [module] => EDIT
        )

    [2] => Array
        (
            [module] => PLUGINS
        )

    [3] => Array
        (
            [module] => SETTINGS
        )

    [4] => Array
        (
            [module] => SYSTEM
        )

    [5] => Array
        (
            [module] => TEMPLATES
        )

Soweit ganz gut, aber leider würde ich gerne nach [module] suchen und stehe halt vor dem ersten Array fest.

Jetzt die Frage: Wie kann ich das erste Array übergehen und danach nach "module" durchsuchen, damit ich die Werte durchsuchen kann. Ich habe es schon mehrfach versucht und will jetzt auch nicht viel mit PHP herumspielen, da ich Angst habe zu viel Last zu erzeugen.

Alternativ würde ich gerne eine SQL Lösung nutzen, weil ich der Meinung bin dass es viel "unlastiger" ist. Kann man nicht mit IN() (SQL) etwas durchsuchen wenn man ein Array als Variable hat?

Danke!
 
Ich würde es so lösen, vielleicht gibt es aber auch eine Funktion dafür:
PHP:
$result = array();
foreach($data as $wrapper) {
$result[] = $wrapper['module'];
}

Das ist auch relativ perfomant, wenn du nur 6 Elemente hast.
 
Danke für die Antwort.

Genau den selben Lösungsweg hatte ich zu Anfang auch. Habe mir aber als Ziel gesetzt diesmal viel mit SQL zu lösen. Ich meine, einen einfachen Lösungsweg sollte es doch sicher geben... oder?
 
Weiß nicht, ob deine DB-Klasse das zulässt, aber momentan sieht's so aus, als ob du ein einziges Feld abrufst und das dann in einem Assoziativen Array zurückgeben lässt. Anstatt da eine vorgefertigte getAll() Methode zu verwenden, könntest du entweder sofort über ein Subselect (später) gehen oder erstmal das Abfangen der Werte "besser" organisieren:

PHP:
<?php
$result = mysql_query("SELECT `module` FROM `tabelle` ...;");

$modules = array();
while ($fetch = mysql_fetch_row($result, MYSQL_NUM)) {
    list($modules[]) = $fetch;
}

Dann hättest du ein Array à la
Code:
Array
(
    [0] => ADD
    [1] => EDIT
    [2] => PLUGINS
    [3] => SETTINGS
    [4] => SYSTEM
    [5] => TEMPLATES
)

Das lässt sich dann super verwenden für zB
PHP:
<?php
foreach ($modules as &$mod) {
    $mod = "'" . mysql_real_escape_string($mod) . "'";
}

$querystring = "
    SELECT `something`
    FROM `sometable`
    WHERE `module` IN (" . implode(',', $modules) . ");";

Alternativ ginge aber auch folgendes in einer einzigen SQL-Abfrage:

SQL:
SELECT `t2`.`something`
FROM `table2` AS `t2`
WHERE `t2`.`module` IN (
    SELECT `t1`.`module`
    FROM `table1` AS `t1`
    );

Hab es einfach mal so getippt - Weiß daher nicht, ob alles 100%ig korrekt ist ;)
 
Danke für die Antworten!

Ich probiere das alles direkt mal aus.

Nebenfrage: Gibt es irgendwo einen Index wo man alle Funktionen für php / mysql einsehen kann und wo direkt eine Bewertung zu finden ist zum Thema "Performant"?

Ich weiß, in den Dokus stehen die Funktionen ;) Ich meine auch eher die Lastigkeit der einzelnen Funktionen.
 
Das Problem macht die Lösung - Somit lässt sich nie wirklich sagen, dass ein bestimmter Lösungsansatz zB performant ist oder nicht... Das ist relativ situaltionsabhängig.
Was natürlich die Performance drückt, sind Redundanzen und unnötige Aufblähung der Scripte. Grundsätzlich ist die trivialste Lösung (nicht vom kognitiven Ansatz aber von der logischen / technischen Seite her) die performanteste.
Niemand kann wirklich sagen, das und das ist die beste Sprache und das und das ist die beste Methode - Das ist situations- und nutzerabhängig, und nur wegen dem Bruchteil einer Mikrosekunde würde ich auch nicht auf Messers Schneide optimieren.

Die systemeigenen / eingebauten Funktionen sind übrigens immer möglichst stark optimiert, weshalb es in den wenigsten Fällen was bringt, sie ersetzen zu wollen durch Eigenkreationen. Da des Weiteren sowohl PHP als auch MySQL Redundanz so gut wie möglich vermeiden, kann man mit der Wahl der verwendeten Funktionen kaum falsch liegen - Nur immer den logischen Aspekt verfolgen ;)

Oftmals hilft auch eine zweite Meinung um ein paar Zeilen noch effizienter zu gestalten - Aber wie gesagt, gibt es keine universelle Lösung für alle Probleme. Die meisten kleinen Kniffe lernt oder bemerkt man während der Programmierung und Erstellung der Queries selbst. Dazu hat bei mir aber vor allem auch die Leserei von speziellen Dokumentationen beigetragen, die man hier und da immer mal wieder aufschnappt (Lustigerweise besonders im legaleren Hacker-Milieu).
 
Zurück