Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[MySQL] Relacje, łączenie wg. dwóch pól
#1
Witam serdecznie,

Zwracam się z zapytaniem/prośbą do Was o pomoc w rozwiązaniu problemu. Otóż posiadam dwie tabele w bazie danych, które muszę połączyć w dość specyficzny sposób.

Tabela 1: zawiera listę wszystkich zarejestrowanych użytkowników
Tabela 2: zawiera listę plików, które zostały oznaczone przez użytkowników jako niezgodne z regulaminem.

Tabela nr 2 zawiera pola:
USER_ID -> wpada tu ID użytkownika z Tabeli1, który oznaczył dany plik za niezgodny
UPLOADER_ID -> ID użytkownika z Tabeli 1, który dodał plik niezgodny z regulaminem

Przybliżony schemat tabel:
Kod:
TABELA 1 - spis wszystkich użytkowników

id     username    
1      user1          
2      user2        
3      user3        
4      user4        
5      user5

Kod:
TABELA 2 - spis plików nieregulaminowych

id     user_id              uploader_id
1      1                       3
2      2                       3
3      3                       2
4      1                       3
5      1                       4


I pytanie. Jak wyciągnąć z Tabeli1 tylko tych użytkowników, którzy pojawili się w Tabeli2 w polu user_id bądź uploader_id? Musze stworzyć linki do userów na podstawie ich username'a a nie id stąd też trzeba połączyć w jakiś sposób te tabele. Będę bardzo wdzięczny za pomocSmile

Pozdrawiam
Odpowiedz
#2
Można na kilka sposobów, pobierasz id z obydwu tabeli i przypisujesz je do osobnych tablic następnie porównujesz i wynikiem jest lista numerów występujących w dwóch tabelach. Rozwiązanie działa ale nie jest najlepsze, dlatego polecam skorzystać z http://dev.mysql.com/doc/refman/5.0/en/join.html
Odpowiedz
#3
(04-02-2012, 23:21)mateo napisał(a): Można na kilka sposobów, pobierasz id z obydwu tabeli i przypisujesz je do osobnych tablic następnie porównujesz i wynikiem jest lista numerów występujących w dwóch tabelach. Rozwiązanie działa ale nie jest najlepsze, dlatego polecam skorzystać z http://dev.mysql.com/doc/refman/5.0/en/join.html

W grę wchodzi tylko i wyłącznie JOIN. Myślałem o takim zapytaniu:
Kod:
SELECT t1.username FROM tabela1 t1
JOIN tabela2 t2 ON t1.id = t2.user_id
JOIN tabela2 t3 ON u.id = t3.uploader_id

Chyba działa dobrze, ale jak dodamy do tego DISTINCT i również COUNT do zliczenia ilości userów to zapytanie do bazy potrafi trwać do 1 min (ilość wpisów w tabeli1 ok. 1mln). To zdecydowanie za długo.

Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,035 13-05-2017, 01:02
Ostatni post: miketodson255
  Pobieranie danych z dwóch baz danych jarekcda 2 5,189 28-11-2016, 11:55
Ostatni post: ania9
  Optymalizacja MySQL-a tomek_00 1 3,931 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,930 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,455 16-07-2013, 15:58
Ostatni post: Engine

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl