matching?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Original geschrieben von mrhappiness
    Und warum nicht mit der von dir bereits erwähnten Zwischentabelle (je user_id und aktivität_id ein Datensatz) und demZählen der Einträge dort?
    Was meinst Du genau mit 'und demZählen der Einträge dort?'

    Select * from aktivitaeten WHERE aktivitaet = '1' && aktivitaet = '2' group by userID

    Dann würde ich ja nur die user finden, die exakt matchen, ich möchte aber auch user finden, die nicht nur exakt matchen, sondern auch die die bis auf 2-3 ausnahmen auf den datensatz matchen...
    Oder habe ich Dich falsch verstanden?

    Kommentar


    • #17
      Ich habe jetzt diese Lösung:

      tabelle aktivitaeten

      userID, a_1, a_2, a_3, a_4, a_5, n_6, n_7, n_8
      1,1,2,3,4,5,6,7,8
      2,1,2,3,4,5
      3,19,16,15,14,13
      4,19,16,15,14,13,12,11,10

      Die zahlen stehen für die entsprechende Aktivitaet, wobei aktivitaet 1 das totalle gegenteil von aktivitaet 19, und die restlichen Aktivitaeten einen verlauf zwischen den beiden bilden, was die ähnlchkeit der aktivitaeten betrifft.

      das matching frage ich dann so ab:

      SELECT user, ((a_1 + a_2 + a_3 + ... + a_8) /8) AS quersumme FROM `tbl_user`
      WHERE ROUND((a_1 + a_2 + a_3 + ... + a_8) /8)= $userQuersumme ORDER BY
      quersumme DESC

      Was haltet ihr davon?

      Kommentar


      • #18
        Original geschrieben von westberlin
        Was haltet ihr davon?
        Abstand

        Mein Vorschlag:
        • Je Kombination aus Benutzer und Aktivität ein Datensatz
        • Alle Aktivitäten des Benutzers auslesen
        • Alle User-IDs auslesen, die von der des Benutzers verschieden sind und die Anzahl übereinstimmender Aktivitäten angeben
          Code:
          SELECT user_id, COUNT(aktivitaet_id) anzahl_gleicher_aktivitaeten
          FROM user_aktivitaet_tab
          WHERE 
            user_id = 4711
            AND aktivitaet_id IN ([i]alle aktivitäten des benutzers 4711[/i])
          GROUP BY user_id
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #19
          > Abstand

          Wieso, wo is da der Denkfehler? Wär schön, wenn Du da ein wenig mehr zu schreiben könntest.

          PHP-Code:
          SELECT user_idCOUNT(aktivitaet_idanzahl_gleicher_aktivitaeten
          FROM user_aktivitaet_tab
          WHERE 
            user_id 
          4711
            
          AND aktivitaet_id IN (alle aktivitäten des benutzers 4711)
          GROUP BY user_id 
          Soll das user_id != 4711 heissen?

          > AND aktivitaet_id IN (alle aktivitäten des benutzers 4711)
          So findest er doch wieder nur Datensätze die exakt matchen bzw auch datensätze, in denen Beispielweise user 4711 5 aktivaeten hat dann matchen auch user die zu diese 5 aktivaeten auch noch 3 andere haben, da die vorgabe ja min 5 und max 8 aktivaeten aus insgesamt 19 aktivitaeten lautet.

          Kommentar


          • #20
            Ja, das muss != heißen.

            Die Abfrage liefert dir die Anzahl gemeinsamer Aktivitäten.

            Beispiel:
            Code:
            CREATE TABLE `user_aktivitaet_tab` (
              `user_id` int(11) NOT NULL default '0',
              `aktivitaet_id` int(11) NOT NULL default '0',
              PRIMARY KEY  (`user_id`,`aktivitaet_id`)
            ) TYPE=MyISAM;
            
            INSERT INTO `user_aktivitaet_tab` VALUES (1, 1),
            (1, 2),
            (1, 3),
            (1, 4),
            (1, 5),
            (1, 6),
            (1, 7),
            (1, 8),
            (1, 9),
            (1, 10),
            (2, 3),
            (2, 5),
            (2, 8),
            (3, 4),
            (4, 11);
            Code:
            SELECT * FROM user_aktivitaet_tab;
            
            +---------+---------------+
            | user_id | aktivitaet_id |
            +---------+---------------+
            |       1 |             1 |
            |       1 |             2 |
            |       1 |             3 |
            |       1 |             4 |
            |       1 |             5 |
            |       1 |             6 |
            |       1 |             7 |
            |       1 |             8 |
            |       1 |             9 |
            |       1 |            10 |
            |       2 |             3 |
            |       2 |             5 |
            |       2 |             8 |
            |       3 |             4 |
            |       4 |            11 |
            +---------+---------------+
            Du willst jetzt wissen, wie gut die übrigen User zu User 1 matchen:
            Code:
            SELECT aktivitaet_id FROM user_aktivitaet_tab WHERE user_id = 1;
            
            +---------------+
            | aktivitaet_id |
            +---------------+
            |             1 |
            |             2 |
            |             3 |
            |             4 |
            |             5 |
            |             6 |
            |             7 |
            |             8 |
            |             9 |
            |            10 |
            +---------------+
            
            
            SELECT
              user_id,
              COUNT(aktivitaet_id) uebereinstimmung
            FROM user_aktivitaet_tab
            WHERE
              user_id != 1
              AND aktivitaet_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
            GROUP BY user_id;
            
            +---------+------------------+
            | user_id | uebereinstimmung |
            +---------+------------------+
            |       2 |                3 |
            |       3 |                1 |
            +---------+------------------+
            Um nur die mit mindestens zwei Übereinstimmungen zu finden:
            Code:
            SELECT
              user_id,
              COUNT(aktivitaet_id) uebereinstimmung
            FROM user_aktivitaet_tab
            WHERE
              user_id != 1
              AND aktivitaet_id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
            GROUP BY user_id
            HAVING uebereinstimmung > 1;
            
            +---------+------------------+
            | user_id | uebereinstimmung |
            +---------+------------------+
            |       2 |                3 |
            +---------+------------------+
            Was davon passt nicht zu deiner Problemstellung?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #21
              > Was davon passt nicht zu deiner Problemstellung?

              Das passt wahrscheinlich sehr gut, wie ich Dich einschätze, jedoch habe/hatte ich's noch nicht verstanden.

              Jetzt hab ich's gecheckt... vielen, vielen Dank!

              Kommentar

              Lädt...
              X