2016-12-03 2 views
0

Ich habe eine Artikel-Websites und ich habe einen Vorschlag, in dem ich vorschlagen, lesen Sie mehr Artikel. Was ich tun möchte, ist, das relevanteste Quiz vorzuschlagen, anstatt zufällige Artikel auszuwählen und sie zu zeigen. Nehmen wir an, ein Leser ist auf einem Artikel mit der ID Nr. 19. Im Vorschlagskasten möchte ich die Artikel zeigen, die von Leuten gelesen wurden, die auch Artikel Nr. 19 gelesen haben. Also, wenn Person A 19,26,30 und Person gelesen hat B liest 19, deshalb interessiert er sich am meisten für Artikel 26,30. Ich habe eine Tabelle, in der ich jeden Artikel, der vom Benutzer gelesen wird, mit seiner Benutzerkennung aufzeichne.Mysql komplexe Daten Problem

ID/USER ID/ARTICLEID 
1/30  /10 
2/20  /10 
3/20  /80 
4/10  /10 
5/20  /60 
6/10  /60 
7/20  /80 
8/10  /90 

Hier ist, was will: die ID des Artikel erhalten, die Benutzer sind READING -> zur Datenbank gehen und id aller Benutzer, die diesen Artikel lesen -> id aller Artikel erhalten, die durch gelesen wurden diese Benutzer -> Bestellen Sie sie nach Anzahl der Benutzer nach Artikel. Es ist wirklich frustrierend, da ich nicht viel mysql Erfahrung habe. so grundlegende Befehle von select scheint nicht zu funktionieren und ich frage nach Hilfe oder nur Idee und ich werde schauen, um sie auszuführen. UPDATE 1: Ausgabe benötigt

  • Benutzer IDS von Benutzern, die die Kennung von Artikel lesen keine 10: IDS: 30/10/20
  • Erfahren Sie, welche anderen Artikel von diesem Benutzer gelesen wurden: 80 (1 Benutzer)/60 (2user)/90 (1User)
  • So Endausgabe: Artikel von ORDER: 60/90/80
+0

Post der gewünschten Ausgabe als auch zu sehen, was auch erwartet. – Rahul

+0

@Rahul Überprüfen Sie das Update und lassen Sie es mich wissen, wenn es klar ist – Yassine

+0

Es scheint, dass Sie einige mysql tutorial Seiten arbeiten müssen. – Drew

Antwort

1

i eine Probe gemacht. Ich bin mir fast sicher, dass Sie das suchen. ich werde beschreiben, es einige Stücke

die vollständige Abfrage

SELECT count(`art_id`) as cnt, `art_id` 
FROM user_art 
WHERE `user_id` in (
     SELECT DISTINCT `user_id` 
     FROM user_art 
     WHERE `art_id` = 10 -- Current Article ID to find other user 
     AND user_id <> 20 -- Current User Id to exclude from list 
     ) 
GROUP by `art_id` 
ORDER BY cnt DESC , `art_id` DESC 
LIMIT 1; 

Schritt für Schritt

die Eingangsdaten

mysql> SELECT * FROM user_art; 
+----+---------+--------+ 
| id | user_id | art_id | 
+----+---------+--------+ 
| 1 |  10 |  10 | 
| 2 |  20 |  30 | 
| 3 |  20 |  80 | 
| 4 |  10 |  90 | 
| 5 |  20 |  10 | 
| 6 |  23 |  10 | 
| 7 |  23 |  11 | 
| 8 |  23 |  12 | 
| 9 |  10 |  11 | 
+----+---------+--------+ 
9 rows in set (0,00 sec) 

mysql> 

alle finden Benutzer-IDs, die auch sam Artikel

mysql> select DISTINCT `user_id` 
    -> FROM user_art 
    -> WHERE `art_id` = 10 -- Current Article ID to find other user 
    -> AND user_id <> 20; -- Current User Id to exclude from list 
+---------+ 
| user_id | 
+---------+ 
|  10 | 
|  23 | 
+---------+ 
2 rows in set (0,00 sec) 

mysql> 

finden Sie alle Artikel lesen, die von Userliste lesen

alle Artikel finden, die von Userliste und Ordnung durch Zählung der Benutzer ab und Artikelnummer desc => höhere ARTICLE_NO lesen => neue Artikel

mysql> SELECT count(`art_id`) as cnt, `art_id` 
    -> FROM user_art 
    -> WHERE `user_id` in (10,23) 
    -> GROUP by `art_id` 
    -> ORDER BY cnt DESC , `art_id` DESC 
    -> ; 
+-----+--------+ 
| cnt | art_id | 
+-----+--------+ 
| 2 |  11 | 
| 2 |  10 | 
| 1 |  90 | 
| 1 |  12 | 
+-----+--------+ 
4 rows in set (0,00 sec) 

mysql> 

comination beide abfragt

comination beiden Abfragen mit LIMIT nur dem nächsten Artikel zu bekommen

mysql> SELECT count(`art_id`) as cnt, `art_id` 
    -> FROM user_art 
    -> WHERE `user_id` in (
    ->   SELECT DISTINCT `user_id` 
    ->   FROM user_art 
    ->   WHERE `art_id` = 10 -- Current Article ID to find other user 
    ->   AND user_id <> 20 -- Current User Id to exclude from list 
    ->  ) 
    -> GROUP by `art_id` 
    -> ORDER BY cnt DESC , `art_id` DESC 
    -> LIMIT 1; 
+-----+--------+ 
| cnt | art_id | 
+-----+--------+ 
| 2 |  11 | 
+-----+--------+ 
1 row in set (0,00 sec) 

mysql> 
+0

Einfach perfekt bro! – Yassine