Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych z dwóch tabel
phpowiec84
post 29.06.2011, 08:53:23
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


mam pewien problem ..

są dwie tabele

1 testy

test_id (int)
user_id (int)

2 share

test_id (int)
user_id (int)
status (int)

chce pobrać wszystkie rekordy z tabeli testy gdzie użytkownik ma w drugej tabeli status różny od 1

nie bardzo wiem jak do tego podejść:/
Go to the top of the page
+Quote Post
Hpsi
post 29.06.2011, 09:00:11
Post #2





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


  1. SELECT `testy`.`test_id`, `testy`.`user_id` FROM `testy`AS `testy` LEFT JOIN `share` AS `share` USING(`user_id`) WHERE `share`.`status`<>1


Pisane z reki mam nadzieje ze dobrze smile.gif


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
phpowiec84
post 29.06.2011, 09:12:50
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


przepraszam ,w powyższym poście nastąpiła pomyłka , w kolumnie test nie ma tabeli user_id \

1 testy

test_id (int)

2 share

test_id (int)
user_id (int)
status (int)
Go to the top of the page
+Quote Post
Hpsi
post 29.06.2011, 09:29:22
Post #4





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


  1. SELECT `test`.`test_id`, `share`.`user_id` FROM `testy` AS `test` LEFT JOIN `share` AS `share` USING `test_id` WHERE `share`.`status`<>1

Do końca nie wiem czy to wyświetli tak jak potrzeba, jeśli nie to daj znak stworze sobie tabele i chwile pokombinuje. Tylko wtedy napisz dokładnie jaki efekt chcesz użyskać
to ma dzialać na zasadzie grupowania ze do pierwszego testu wyswietli ci wszyskich userow ktorzy wykonali ten test?


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
phpowiec84
post 29.06.2011, 11:06:35
Post #5





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


dzięki ,działa świetnie smile.gif

a co jeśli druga tabela nie zawiera rekordów pasujących do :

test.test_id = share.test_id ?
Go to the top of the page
+Quote Post
Rochu
post 29.06.2011, 11:26:46
Post #6





Grupa: Zarejestrowani
Postów: 64
Pomógł: 14
Dołączył: 25.09.2010

Ostrzeżenie: (0%)
-----


wtedy takie pole bedzie mialo wartosc NULL, czyli bedzie po prostu puste
Go to the top of the page
+Quote Post
phpowiec84
post 29.06.2011, 11:54:33
Post #7





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


ale mi zależy aby pobrać wszystkie testy w których użytkownik nie brał udziału,a powyższe pytania zwraca mi wszystkie w których brał udział :/
Go to the top of the page
+Quote Post
Hpsi
post 29.06.2011, 12:01:11
Post #8





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jak masz oznaczone w bazie czy user brał czy nie brał w danym teście udział? po prostu wpis czy jak?


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
phpowiec84
post 29.06.2011, 12:19:01
Post #9





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


mam wpis jeżeli brał udział w teście ,dodatkowo share.status podaje czy test został przyjęty , czy odzucony

więc chcę aby wynikiem zapytania było :

czy user brał udział w teście , jeśli tak to pobrać również testy gdy share.status <> 1
Go to the top of the page
+Quote Post
Hpsi
post 29.06.2011, 12:32:34
Post #10





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Czyli jesli dobrze zrozumiałem:

Twoje zapytanie ma działać na zasadzie:

do danego użytkownika pobiera wszystkie testy, sprawdza czy share.status<>1 (jeśli jest wpis) i te ma pokazywać?
Czy ma pobierać wszystkich uzytkowników + wpis o testach w jakim brali udział ?


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
phpowiec84
post 29.06.2011, 13:12:31
Post #11





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


może inaczej ,niech pobiera wszystkie testy w których użytkownik nie brał udziału (pomińmy kolumnę share.status)
Go to the top of the page
+Quote Post
Hpsi
post 29.06.2011, 13:34:05
Post #12





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


pokombinuje torkszę jak to zrobić - daj mi chiwle wink.gif jesli sie uda dam rozwiazanie.

Sprawdź czy o to Ci chodziło:

Stworzłem 2 tabele:
Kod
mysql> select * from share;
+---------+---------+--------+
| test_id | user_id | status |
+---------+---------+--------+
|       1 |       1 |      1 |
|       2 |       1 |      0 |
+---------+---------+--------+

Oraz
mysql> select * from testy;
+---------+
| test_id |
+---------+
|       1 |
|       2 |
|       3 |
+---------+


Wynik zapytania:
  1. SELECT `test_id` FROM `testy` WHERE `test_id` NOT IN (SELECT `test_id` FROM `share` WHERE `user_id`=1 AND `status`=1);

jest następujacy:
Kod
mysql> select `test_id` FROM `testy` WHERE `test_id` NOT IN (select `test_id` FROM `share`  WHERE `user_id`=1 AND `status`=1);
+---------+
| test_id |
+---------+
|       2 |
|       3 |
+---------+
2 rows in set (0,00 sec)


To ci pokaze wszystkie testy w ktorych status nie jest 1 dla uzytkownika o id 1

Ten post edytował Hpsi 29.06.2011, 13:35:18


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 03:13