Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Porównanie z dwóch tabel z wyciągnięciem danych
Max Damage
post 2.10.2007, 21:14:14
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Mam tabele forum i user. W tabeli forum mam mn. kolumnę autor, a w tabeli user mn. kolumny nick i user_id.
Teraz taki oto kod:
  1. <?php
  2. $zapytanie="select * from forum where id_artykulu='$id_artykulu'";
  3. $wynik = $lacz->query($zapytanie);
  4. $wiadomosc=$wynik->fetch_array();
  5. $zapytanie2="select user.user_id from user where forum.autor=user.nick";
  6. $wynik2=$lacz->query(zapytanie2);
  7. $wiadomosc2=$wynik2->fetch_array();
  8. echo $wiadomosc['temat'];
  9. echo '<br/>';
  10. echo "<a href='profil.php?id=".$wiadomosc2['user_id']."'>".$wiadomosc['autor']."</a>"; 
  11. echo '<br/>';
  12. echo $wiadomosc['wiadomosc'];
  13. echo '<br/>';
  14. echo date ('M d,H:i',$wiadomosc['umieszczony']);
  15. echo '<br/>';
  16. echo "<a href='odpowiedz.php?id=".$wiadomosc['id_artykulu']."'>Odpowiedz</a>"; 
  17. echo '<br/>';
  18. ?>

Pierwsze zapytanie działa bez problemu, chodzi mi natomiast o drugie w którym chcę wyciągnąć user_id kolesia którego nick widnieje w kolumnie autor. Próbowałem w tym celu porównać autora z nickiem, ale spełzło na niczym :/
Mam nadzieje, że nie zagmatwałem tego za bardzo i wiadomo o co chodzi....
Dobrze by też było jak by mi ktoś chociaż powiedział czy te 2 zapytania da się połączyć w jedno, chociaż najpierw wolałbym aby to w ogóle działało jak trzeba....


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
AxZx
post 2.10.2007, 21:18:17
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


moze daj strukture tych 2 tabel,
porownanie tresci jest wiekszym obciazeniem niz porownanie liczb,
wiec lepiej jakbys szukal forum.autor_id = wiadomosc.autor_id

nie wiem jaka masz strukture i jak masz baze zaprojektowana, ale cos tu nie gra, napewno da sie to uproscic i zoptymalizowac.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Max Damage
post 2.10.2007, 21:33:53
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Ok, to są kody tworzące moją bazę:
  1. $sql="create table user
  2. (
  3. user_id int unsigned not null auto_increment primary key,
  4. nick varchar(16) not null,
  5. haslo char(30) not null,
  6. email varchar(100) not null)";
  7.  
  8. $sql="create table forum
  9. (
  10. id_artykulu int unsigned not null auto_increment primary key,
  11. temat char(20) not null,
  12. wiadomosc text,
  13. autor char(16) not null,
  14. umieszczony int not null)";


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
AxZx
post 2.10.2007, 22:37:02
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


autor to moze byc user_id ?
zmien typ na int

jak juz to zrobisz to wyciagniecie wiadomosci robisz z uzyciem join

  1. SELECT * FROM user LEFT JOIN forum ON forum.autor = user.user_id


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Max Damage
post 3.10.2007, 11:41:58
Post #5





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Nie do końca się zrozumieliśmy. Pierwsze zapytanie służy oczywiście do określenia wiersza - z którego mają być pobierane różne dane - na podstawie id_artykulu. Np. Kiedy umieszczony, temat itd. Tak też jest pobierany autor postu, nie jest to jednak jego numer id a nick.
Może i dało się to jakoś lepiej zrobić ale nie wiedziałem jak więc jest jak jest....
Teraz chodzi o takie zapytanie aby porównać : forum.autor do user.nick czy są obydwa takie same, jak tak to bierzemy jego id (czyli user_id). I się wyświetla wtedy link poprawnie.
Jak masz na to wszystko lepszy pomysł to daj znać. Chętnie to poprzerabiam....

PS. Przerobiłem więc twoje zapytanie na coś takiego:
  1. SELECT user_id FROM user LEFT JOIN forum ON forum.autor = user.nick

Czy tak to powinno być?
Mam też problem innego rodzaju. Gdy dopisuje te 3 linijki:
  1. <?php
  2. $zapytanie2="select user_id from user left join forum on forum.autor = user.nick"; 
  3. $wynik2=$lacz->query(zapytanie2) or die ('zapytanie: '.$zapytanie.'---blad:'.mysql_error());
  4. $wiadomosc2=$wynik2->fetch_array();
  5. ?>

Wyswietla mi się w pewnym sensie błąd:
  1. <?php
  2. zapytanie: select * from forum where id_artykulu='20'---blad:
  3. ?>

Wie ktoś może dlaczego?


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
AxZx
post 3.10.2007, 12:02:55
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat
Jak masz na to wszystko lepszy pomysł to daj znać. Chętnie to poprzerabiam....


juz ci napisalem jaki mam lepszy pomysl
zapisuj ID autora a nie jego nick.

  1. <?php
  2. $wynik2=$lacz->query(zapytanie2) or die ('zapytanie: '.$zapytanie.'---blad:'.mysql_error());
  3. ?>


tu miala byc zmienna $zapytanie2
czyli
  1. <?php
  2. $wynik2=$lacz->query(zapytanie2) or die ('zapytanie: '.$zapytanie2.'---blad:'.mysql_error());
  3. ?>


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Max Damage
post 3.10.2007, 12:12:49
Post #7





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Super. Działa tak jak chciałem. Wielkie dzięki za pomoc : )
Nie wiem czy zapisywanie id jest lepsze. Na pewno porównanie dwóch id by było szybsze, tylko że przy odczytywaniu autora wyświetlał by się jego id a nie nick, czyli musiałbym zrobić chyba jeszcze jedno zapytanie do bazy. Nie wyjdzie przypadkiem na to samo?

Edit: Ok, nieco się pośpieszyłem z tym podziękowaniem. Mianowicie ciągle odczytuje mi user_id na wartość 1 - niezależnie od nicku. Zdaje się, ze w tym zapytaniu ciągle jednak coś nie gra. Wie ktoś co jest nie tak?

Ten post edytował Max Damage 3.10.2007, 13:58:25


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
nospor
post 3.10.2007, 14:17:30
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT user.user_id FROM user, forum WHERE forum.autor=user.nick AND forum.id_artykulu='$id_artykulu'


pozatym lepszym rozwiazaniem by bylo, jakbys w forum.autor trzymal jego id a nie nick.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
AxZx
post 6.10.2007, 18:53:32
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


a przy odczytwaniu poprostu robisz zlaczenie tabeli z autorami i w ten sposob, majac dane ID autora pobierasz jego nazwe.


--------------------
aplikacje internetowe | Symfony
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: 19.05.2025 - 04:42