PHP - Alfabetyczne sortowanie tabeli wielowymiarowej

0

Witajcie.
PHP się uczę, więc proszę o wyrozumiałość.

Pobieram z bazy MySQL dane:

while ($row = $stmt->fetch())
					{
                                        
                                        $stmtwt = $db->query('SELECT * FROM Wtyczki WHERE ID ="'.$row['IDWtyczka'].'" LIMIT 1');
                                        $stmtwt->execute(); 
                                        $rowwt = $stmtwt->fetch();
                                        $nameWtyczka = $rowwt[1];
                                        
                                        $stmtwe = $db->query('SELECT * FROM Wersja WHERE ID ="'.$row['IDWersja'].'" LIMIT 1');
                                        $stmtwe->execute(); 
                                        $rowwe = $stmtwe->fetch();
                                        $nameWersja = $rowwe[1];
                                        
                                        $dane[$i]['id'] = $row['ID'];
                                        $dane[$i]['wtyczka'] = $nameWtyczka;
                                        $dane[$i]['wersja'] = $nameWersja;
                                        
                                        
                                        $i++;
                                        
                                        
                                        } 

Tablica dane to tablica wielowymiarowa.
Chcę posortować ją według 'wtyczka' - nazwa, wyświetlić dzięki PHP w kolejności alfabetycznej, nie po ID.
Dlaczego? Bo w przypadku dodania kolejnej wtyczki ID się zwiększa i wyrzuca nazwę na sam koniec niezależnie od nazwy.

Wyświetlanie realizuje za pomocą takiego kodu:

$i=0;
                                        for($j=0;$j<sizeof($dane);$j++){
                                            echo '<div class="col-lg-6">';
                                        echo '<input type="checkbox" name="wtyczkiStrona[]" value="'.$dane[$j]['id'].'" /><span>'.$dane[$j]['wtyczka'].'('.$dane[$j]['wersja'].')'. '</span>';
					
                                        
                                        if($i%2 != 0){
                                            echo '<br>';
                                        }
                                        $i+=1;
                                        echo '</div>';
                                        } 

Jak mniemam, muszę użyć array_multisort() lecz nie wiem za bardzo jak. Rozbić tablicę wielowymiarową na pojedynczą? Jak wtedy to wyświetlić? A może wystarczy jakoś inaczej pobrać z bazy danych?
Pomóżcie, naprowadźcie. Będę wdzięczny :)

1

W zapytaniu do bazy danych użyj ORDER BY [nazwa_kolumny] [ASC/DESC]

0

Tylko dobrze zachowa się zapytanie? Zauważ, iż praktycznie z 3 tabel są informacje podawane. Nie wiem właśnie, czy dobrze. Ale spróbuję.

Nie sprawdza się. Myślę, iż w pętli wyświetlającej trzeba coś edytować. Inaczej chyba się tego nie ogarnie.
Tylko co trzeba zrobić?

0

Jak musisz w ten sposób to użyj usort i zdefiniuj własną funkcję porównującą pozycje. Czyli coś w stylu

usort($dane, function($a, $b) {
    return strcmp($a['wtyczka'], $b['wtyczka']);
});

Ale na serio o miliard razy łatwiej by to było jednym zapytaniem ogarnąć :)

0

To jak to ogarnąć jednym zapytaniem? Grunt, by było optymalnie :)

0

Ciężko dokładnie powiedzieć bez znajomości struktury, ale możesz poczytać o join'ach w bazie danych.

1

Aktualnie te 3 zapytania przebudowałem w jedno:

 select * from WWPolacz inner join Wtyczki inner join Wersja on WWPolacz.IDWtyczka = Wtyczki.ID and WWPolacz.IDWersja = Wersja.ID;

Dodałem ORDER BY Wtyczki.Nazwa - nazwa wtyczki.

 select * from WWPolacz inner join Wtyczki inner join Wersja on WWPolacz.IDWtyczka = Wtyczki.ID and WWPolacz.IDWersja = Wersja.ID; order by Wtyczki.Nazwa

I działa! Dzięki wielkie za nakierowanie na rozwiązanie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1