IMPRESSUM dotted_line KONTAKT dotted_line search dotted_line Contact dotted_line sitemap
237 PHP-Resource Mitglieder online


php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Blogs > AmicaNoctis
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

Bewerten

Gruppenwechsel in PHP

"Gruppenwechsel in PHP" bei Mister Wong speichern "Gruppenwechsel in PHP" bei YiGG.de speichern "Gruppenwechsel in PHP" bei Google speichern "Gruppenwechsel in PHP" bei del.icio.us speichern "Gruppenwechsel in PHP" bei Digg speichern "Gruppenwechsel in PHP" bei icio.de speichern "Gruppenwechsel in PHP" bei My Yahoo speichern
Veröffentlicht: 03-06-2010 um 02:13 von AmicaNoctis

Da das Thema Gruppenwechsel immer mal wieder im Forum auftaucht, will ich an dieser Stelle mal einen lächerlich einfachen Ansatz vorstellen und erklären.

Wenn man eine Abfrage über mehrere Datenbanktabellen durchführt, erhält man fast immer eine Ergebnismenge in der Daten mehrfach vorkommen, die zwar in der Tabelle aus der sie stammen eindeutig sind, durch die Verknüpfung mit anderen Tabellen jedoch mehrfach in verschiedenen Kombinationen erscheinen. Ein Beispiel:

Code:
+---------------------------------------------------------+
| table: revision                                         |
+----+------------+--------+---------------------+--------+
| id | table_fkey | row_id | time                | type   |
+----+------------+--------+---------------------+--------+
|  1 |          1 |   NULL | 2010-03-03 09:20:30 | insert |
|  2 |          1 |      1 | 2010-03-03 09:20:30 | update |
|  3 |          1 |      1 | 2010-03-03 09:20:30 | update |
|  4 |          1 |   NULL | 2010-03-03 09:20:30 | insert |
|  5 |          1 |      2 | 2010-03-03 09:20:30 | update |
|  6 |          1 |      2 | 2010-03-03 09:20:31 | update |
|  7 |          1 |      1 | 2010-03-03 09:20:31 | update |
|  8 |          1 |      2 | 2010-03-03 09:20:31 | update |
|  9 |          1 |   NULL | 2010-03-03 09:20:31 | insert |
| 10 |          1 |      3 | 2010-03-03 09:20:31 | update |
:    :            :        :                     :        :
+----+------------+--------+---------------------+--------+

+-------------------------------------------------------------------+
| table: change                                                     |
+----+-------------+---------------+--------------------+-----------+
| id | column_fkey | revision_fkey | new_value          | old_value |
+----+-------------+---------------+--------------------+-----------+
|  1 |           1 |             1 | 1                  | NULL      |
|  2 |           2 |             1 | 2                  | NULL      |
|  3 |           3 |             1 | NULL               | NULL      |
|  4 |           4 |             1 |                    | NULL      |
|  5 |           3 |             2 | phpstaruml         | NULL      |
:    :             :               :                    :           :
| 13 |           2 |             7 | 4                  | 2         |
| 14 |           1 |             8 | 2                  | 3         |
| 15 |           2 |             8 | 3                  | 4         |
| 16 |           1 |             9 | 5                  | NULL      |
| 17 |           2 |             9 | 6                  | NULL      |
| 18 |           3 |             9 | NULL               | NULL      |
| 19 |           4 |             9 |                    | NULL      |
| 20 |           3 |            10 | AssociationTag.php | NULL      |
:    :             :               :                    :           :
+----+-------------+---------------+--------------------+-----------+
Die Abfrage

Code:
select
	revision.id as rev_id,
	revision.row_id,
	revision.type,
	`change`.id as chg_id,
	`change`.new_value,
	`change`.old_value,
from `change`
join revision on revision.id = change.revision_fkey;
liefert dann jeden revision-Datensatz mehrfach, wenn ihm mehrere change-Datensätze zugeordnet sind:

Code:
+--------+--------+--------++--------+--------------------+-----------+
| rev_id | row_id | type   || chg_id | new_value          | old_value |
+--------+--------+--------++--------+--------------------+-----------+
|      1 |   NULL | insert ||      1 | 1                  | NULL      |
|      1 |   NULL | insert ||      2 | 2                  | NULL      |
|      1 |   NULL | insert ||      3 | NULL               | NULL      |
|      1 |   NULL | insert ||      4 |                    | NULL      |
|      2 |      1 | update ||      5 | phpstaruml         | NULL      |
:        :        :        ::        :                    :           :
|      7 |      1 | update ||     13 | 4                  | 2         |
|      8 |      2 | update ||     14 | 2                  | 3         |
|      8 |      2 | update ||     15 | 3                  | 4         |
|      9 |   NULL | insert ||     16 | 5                  | NULL      |
|      9 |   NULL | insert ||     17 | 6                  | NULL      |
|      9 |   NULL | insert ||     18 | NULL               | NULL      |
|      9 |   NULL | insert ||     19 |                    | NULL      |
|     10 |      3 | update ||     20 | AssociationTag.php | NULL      |
:        :        :        ::        :                    :           :
+--------+--------+--------++--------+--------------------+-----------+
In der Ausgabe will man so etwas aber meist gruppiert darstellen, weil das einfach übersichtlicher ist oder aber daraus eine hierarchische Struktur (z. B. XML) erstellen und genau das macht man mit einem Gruppenwechsel.

Die am häufigsten anzutreffende Variante besteht darin, einen Wert zwischenzuspeichern, um ihn dann mit dem nächsten vergleichen zu können. Unterscheiden sich die beiden, wird in der Ausgabe der Gruppenbruch erzeugt und den neue Wert für die nachfolgenden Vergleiche zwischengespeichert:

PHP-Code:
$old null;
foreach (
$rows as $row) {
    if (
$row[$column] != $old) {
        
create_group_break($row[$column]);
        
$old $row[$column];
    }
    
create_row_output($row);

Bis hierher ist das auch noch recht übersichtlich, aber damit ist es dann vorbei, wenn man sowieso mit Arrays arbeiten möchte oder der Gruppenwechsel mehrere Ebenen umfasst.

Dabei ist es gerade in PHP so leicht, wenn man sich die Eigenschaften von Arrays zunutze macht. Bei Wertzuweisungen zu einem Array gibt man ja den Schlüssel an, unter dem der Wert gespeichert werden soll:

PHP-Code:
$array["key"] = $neuerWert
Dabei ist es naheliegenderweise egal, ob unter diesem Schlüssel bereits ein Wert gespeichert war (dann wird er überschrieben) oder ob er neu angelegt wird. Das schöne ist aber, dass dies auch über mehrere Ebenen funktioniert:

PHP-Code:
$array["abc"]["def"][] = "wert 1";
$array["abc"]["ghi"][] = "wert 2";
$array["abc"]["def"][] = "wert 3";
print_r($array); 
ergibt

PHP-Code:
Array
(
    [
abc] => Array
        (
            [
def] => Array
                (
                    [
0] => wert 1
                    
[1] => wert 3
                
)
            [
ghi] => Array
                (
                    [
0] => wert 2
                
)
        )

Vorhandene Schlüssel werden also jeweils weiter benutzt und neue einfach hinzugefügt. Genau das ist schon alles, was man für einen Gruppenwechsel braucht. Wenn man also im Beispiel oben die Datensätze zweistufig gruppieren will – zuerst nach Typ, dann nach Revision – braucht man dafür nicht mehr als das hier:

PHP-Code:
$array = array();
foreach (
$rows as $row) {
    
$array[$row["type"]][$row["rev_id"]][] = $row;

Das gruppierte Ergebnis steht dann in $array. Et voilà.

Digg this Post! Add Post to del.icio.us Bookmark Post in Technorati Furl this Post!
Kategorie: Kategorielos
Hits 6460 Kommentare 10 Stichworte bearbeiten Hinweis auf diesen Blog-Eintrag per E-Mail verschicken
« Zurück     Startseite des Blogs     Nächste »
Kommentare 10

Kommentare

  1. Alter Kommentar
    I recently came across your blog and have been reading along. I thought I would leave my first comment. I did a request on the subject and identified essentially all persons will agree with your online diary Gamerwell - FFXIV Gil - Aion Kinah - Maplestory 2 Mesos | Swtor Credits, Cheap Swtor Credit, Buy Swtor Credits
    permalink
    Veröffentlicht: 24-02-2016 um 06:11 von nikanson nikanson ist offline
  2. Alter Kommentar

    nice

    Wow. cool post. I’d like to write like this too – taking time and real hard work to make a great article… but I put things off too much and never seem to get started. Thanks though. super smash flash 2
    bloons tower defense 5
    permalink
    Veröffentlicht: 24-03-2017 um 02:29 von MarkCPhillips MarkCPhillips ist offline
  3. Alter Kommentar
    it's been operating for a long time in this publish for a great concept on it. I truly very experience analyzing your true and beneficial post thanks and you guys doing the sort of great job keep it up cool math games
    permalink
    Veröffentlicht: 22-01-2018 um 05:22 von annashetty annashetty ist offline
  4. Alter Kommentar
    Hi there I feel so fortunate to come over your blog you express it in a very easiest way! I am very much active person over your blog pretty good to read your blog its quit interesting to read your blog always because it looks fresh all the time!! Love!
    create gmail account | 10.0.0.1 ip address
    permalink
    Veröffentlicht: 25-01-2018 um 08:54 von Hong91 Hong91 ist offline
  5. Alter Kommentar
    Thanks for posting this html codes they really help a lot to ios development company
    permalink
    Veröffentlicht: 28-02-2018 um 07:51 von roger00 roger00 ist offline
  6. Alter Kommentar
    more links info:
    https://zorayax.podbean.com/e/porno-variado/
    https://zorayax.podbean.com/e/batidora-porno/
    https://zorayax.podbean.com/e/videos-xxx-gratis/
    Xuite ????
    http://blog.xuite.net/zoraya/blog/374811586
    Xuite ????
    http://blog.xuite.net/zoraya/blog/374809718
    http://blog.xuite.net/zoraya/blog/374808828
    Xuite ????
    Mi vecina del tren - jimbox
    Magia en un oral - jimbox
    https://www.templaza.com/Forums/prof...77-jimbox.html
    https://support.bioconductor.org/u/15183/
    relatos XXX gratis - relatos xxx y videos porno gratis
    relatosx @ HWBOT
    jimbox – Profile – Kerala Taxes Forum
    Buxvertise
    Limpieza | Diario Femenino - Foros
    Free Music Archive: zoraya
    Sexo entre rejas @ El blog de Zoraya :: ??? ::
    Juan y la insolita familia @ El blog de Zoraya :: ??? ::
    Visitas al streptease @ El blog de Zoraya :: ??? ::
    Bailarina @ El blog de Zoraya :: ??? ::
    Mis nuevas amistades @ El blog de Zoraya :: ??? ::
    PictureTrail
    zoraya's Profile @ DatPiff.com
    https://bible.org/users/zoraya
    https://segmentfault.com/q/1010000013029510
    Carlos Lachaplan / Open Source Bridge: The conference for open source citizens
    FORO DE LAS ADQUISICIONES PUBLICAS • Ver Tema - CERTIFICACION
    https://www.813area.com/tampa/westsh...-autopista.htm
    EdVFCByF: juanca lina: Marina no tiene suficiente
    EdVFCByF: juanca lina: Odontologia creativa
    EdVFCByF: juanca lina: Mi amazona
    ÑÒÐÀÕÎÂÀÍÈÅ ÑÅÃÎÄÍß | Ôîðóì
    https://www.dietbet.com/community/groups/1035-relatos-x
    https://www.dietbet.com/community/groups/1036-cuentos-x
    Fin de semana en Guanajuato
    Bendita transgresion
    https://alonetone.com/bingoxxx/bio
    https://www.viki.com/users/publiwebmaxter_49/about
    jimbo's Travel Showcase - www.tripntale.com
    https://www.komogvind.dk/profile/jimboxxx
    cross.tv - jorge perez - Usos de mi cuerpo
    cross.tv - jorge perez - La energía erótica
    cross.tv - jorge perez - El dinero a veces mata a la novia
    cross.tv - jorge perez - Samantha
    cross.tv - jorge perez - Nueve velas, una laguna y una noche de pasión
    cross.tv - jorge perez - La noche y la hoguera
    cross.tv - jorge perez - Mi vino tinto
    cross.tv - jorge perez - Los veintiún gramos del alma
    cross.tv - jorge perez - Lágrimas de felicidad
    https://www.thebmc.co.uk/profile?id=22330
    https://thefastdiet.co.uk/forums/users/jimbox/
    Profilo di juanca lina
    https://publiwebmaxter.kroogi.com/en...r-mercado.html
    https://publiwebmaxter.kroogi.com/en...-La-Playa.html
    https://publiwebmaxter.kroogi.com/en...ta-Fresca.html
    https://publiwebmaxter.kroogi.com/en...s-maduros.html
    https://publiwebmaxter.kroogi.com/en...nferencia.html
    https://publiwebmaxter.kroogi.com/en...-sepulcro.html
    https://publiwebmaxter.kroogi.com/en...ante-yago.html
    https://forum.ilmeteo.it/user-27999.html
    https://kinja.com/jimboxx
    Por fin nos conocemos by Don Cheto
    Reencuentro by Don Cheto
    https://armorgames.com/user/jorgepp
    permalink
    Veröffentlicht: 07-03-2018 um 18:56 von zoraya zoraya ist offline
  7. Alter Kommentar
    gmail login
    Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
    hotmail login | hotmail sign in
    permalink
    Veröffentlicht: 18-04-2018 um 09:14 von Hong91 Hong91 ist offline
  8. Alter Kommentar
    Thanks for your sharing. I realize a lot of useful things from this article potty racers
    permalink
    Veröffentlicht: 20-04-2018 um 11:34 von agariogames agariogames ist offline
  9. Alter Kommentar
    https://www.steinberg.net/forums/mem...ofile&u=105282
    https://es.dawanda.com/topic/4529/13...#post_14497255
    Ventajas de Linux sobre Windows - Poderosa
    https://www.ibm.com/developerworks/c...00#repliesPg=0
    https://www.ibm.com/developerworks/c...00#repliesPg=0
    Profile of chef
    https://forum.ilmeteo.it/user-28256.html
    https://forums.adobe.com/people/porn...m?view=profile
    https://www.techlicious.com/blog/phi...gets/#comments
    FIGMENT Boston 2017 Press Kit - FIGMENT BOSTON
    Para no ser un talibán del Madrid... - El penúltimo raulista vivo - Libertad Digital
    https://community.mims.com/general/5...itos-perversos
    CEPS - Centro europeo de estudios políticos y sociales
    https://es.dawanda.com/topic/4529/13...#post_14525159
    https://amaphiko.redbull.com/en/user...pdates%20saved
    3D Printing Forum • View topic - Can Pro jr 1.0 do PETG?
    https://www.greenalp.com/forum/membe...rofile&u=10029
    https://bible.org/users/golfa
    v
    https://raidforums.com/Thread-Get-Se...4307#pid274307
    La Gavidia: la Plaza de Mayo de Andalucía - Andaluces Diario
    https://community.mims.com/general/5...itos-perversos
    RARB/CASA Forums • View topic - Amor eterno
    https://es.dawanda.com/topic/4529/13...#post_14525163
    3D Printing Forum • View topic - Calibrating
    3D Printing Forum • View topic - Calibrating
    https://es.wizbii.com/profile/chi-cago
    teatro del astrillero: El teatro y las artes escénicas
    3D Printing Forum • View topic - Can Pro jr 1.0 do PETG?
    https://amaphiko.redbull.com/en/users/jose-flores-rrpp
    https://es.dawanda.com/topic/4529/11...#post_14525167
    RARB/CASA Forums • View topic - En mi casa
    https://community.mims.com/user/profile/2792127
    https://www.ranker.com/profile-of/tengo19
    chupito | Ancient Origins
    Yo luché en la Segunda Guerra Mundial - Andaluces Diario
    https://raidforums.com/Thread-Get-Se...4307#pid274307
    FIGMENT Boston 2017 Press Kit - FIGMENT BOSTON
    https://coastalanglermag.com/members/pepe/
    https://coastalanglermag.com/members/pepe/
    Una vez hice el amor en un cincamil – Evinit
    ONSA | BBS • Ver Tema - ¿Qué son los Cursos OMI? Certificación y Centros autorizados
    información importante - SoftEther VPN User Forum
    información importante - SoftEther VPN User Forum
    https://www.viki.com/users/bobee1937_578/about
    https://www.viki.com/users/bobee1937_578/about
    https://www.jvzoo.com/sellers/user/1010429
    EURO Ressources ECLARATION OF INTERIM DIVIDEND - Financial news Euroinvestor
    Maquillaje en Make UP – le petit trianon style
    Forum » Play the Game
    https://es.dawanda.com/topic/4529/13125599
    http://participa.ma.gov.br/xoxy/blog...rtida-muy-rara
    Criptomonedas, un nuevo concepto - Fritalk
    http://topedetiendasx.bigcartel.com/...rritas-molonas
    http://topedetiendasx.bigcartel.com/...rritas-molonas
    Profile of sandrita
    Highslide JS Forum :: Viewing profile
    https://www.viki.com/users/bobee1937_578/about
    https://www.blipfoto.com/vaporux
    https://notehub.org/md3uu
    https://coastalanglermag.com/members/pepe/
    https://coastalanglermag.com/members/pepe/
    https://www.gunpartscorp.com/forum/o...ing-one-240856
    https://amaphiko.redbull.com/en/users/jose-flores-rrpp
    3D Printing Forum • View topic - Can Pro jr 1.0 do PETG?
    permalink
    Veröffentlicht: 13-05-2018 um 20:28 von fieston fieston ist offline
  10. Alter Kommentar
    getapkdownload.org app is the store that has the collection of apk files available for free.
    permalink
    Veröffentlicht: 18-05-2018 um 11:23 von DanielMack DanielMack ist offline
 
Trackbacks 0

Trackbacks


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:21 Uhr.



Search Engine Friendly URLs by vBSEO 3.3.0