Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
[MySQL] Relacje, łączenie wg. dwóch pól - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: [MySQL] Relacje, łączenie wg. dwóch pól (/thread-mysql-relacje-laczenie-wg-dwoch-pol)



[MySQL] Relacje, łączenie wg. dwóch pól - Pavlosik - 04-02-2012

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


RE: [MySQL] Relacje, łączenie wg. dwóch pól - mateo - 04-02-2012

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


RE: [MySQL] Relacje, łączenie wg. dwóch pól - Pavlosik - 04-02-2012

(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.