1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Query (für m:n relation)

  • davewood
  • 3. Oktober 2010 um 12:08
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 12:08
    • #1

    Relationen:
    pictures --<>-- picture_tags --<>-- tags

    Input:
    Liste mit tags. zB (2,5,6)

    Query:
    Alle pictures mit tags (2,5,6)

  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 12:11
    • #2

    Wer suchet der findet. :)

    http://stackoverflow.com/questions/1680…mn-relationship

    Code
    select *
    from pictures p
    where 3 = (
        select count(distinct t.id)
        from picture_tags pt
        inner join tags t on t.id = pt.tag_id
        where t.id in (2,5,6)
        and pt.picture_id = p.id
    )

    2 Mal editiert, zuletzt von davewood (3. Oktober 2010 um 12:31)

  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 13:55
    • #3

    Und wer schreibt mir das jetzt als DBIx::Class search argument?

    ps: keine ernst gemeint Anfrage.

    Einmal editiert, zuletzt von davewood (3. Oktober 2010 um 14:50)

  • Christoph R.
    Punkte
    2.626
    Beiträge
    428
    • 3. Oktober 2010 um 14:11
    • #4
    Zitat von davewood

    Und wer schreibt mir das jetzt als DBIx::Class search argument?



    Niemand, würde ich mal vermuten. Schon gar nicht wenn du die Frage so stellst als ob dir irgendjemand was schulden würde.

    Aber für den Anfang gebe ich dir einen Tipp: Sich im Internet eine fertige Query zu suchen (die zudem sicher auch einfacher geschrieben werden kann), und sie dann in irgendwas anderes übersetzen zu wollen, führt in der Regel nicht zum Ziel. Schau dir lieber die Grundlagen zur DBIx::Class ordentlich an und entwickle die Anfrage schrittweise.

  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 14:49
    • #5

    Betrachte mein posting als Dialog mit mir selber. Ich erwarte mir nicht, dass jemand meine Arbeit erledigt schon gar nicht wenn ich's so fomuliere.

    Die DBIx::Class Dokumentation ist mir gut bekannt. Die Query allerdings nicht trivial und da ich schon ne Weile an dem Problem arbeite ist mir die Meldung quasi rausgerutscht.

    Sorry

    Einmal editiert, zuletzt von davewood (3. Oktober 2010 um 14:54)

  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 18:00
    • #6

    Bringt nicht so viel aber wenn mal jemand drüberstolpern sollte.

    Code
    return $self->search(
               {
                   tag_id => { -in => \@tag_ids },
               },
               {
                   join        => 'picture_tags',
                   group_by    => ['me.id', 'me.name'],
                   having      => { 'count(tag_id)' => { '=', scalar @tag_ids } }
               }
           );
  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 3. Oktober 2010 um 19:08
    • #7
    Code
    return $self->search (
                { map { 'picture_tags' . ($_ ? '_' . ($_+1) : '') . '.tag_id' => $enabled_tag_ids[$_] } (0 .. $#enabled_tag_ids) },
                { join => [ ('picture_tags') x @enabled_tag_ids ] }
            );

    multijoin much faster then group_by&having solution

    thanks to ribasushi @ #dbix-class

    ps: limit size of @enabled_tag_ids

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum