Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie danych z dwóch tabel
phpowiec84
post
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
 
Start new topic
Odpowiedzi (1 - 11)
Hpsi
post
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
phpowiec84
post
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
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?
Go to the top of the page
+Quote Post
phpowiec84
post
Post #5





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

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


dzięki ,działa świetnie (IMG:style_emoticons/default/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
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
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
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?
Go to the top of the page
+Quote Post
phpowiec84
post
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
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ł ?
Go to the top of the page
+Quote Post
phpowiec84
post
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
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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 13:04