Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]moduł znajomych
neo1986kk
post
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


Witam, probuje stworzyc moduł znajomych ale potrzebuję waszej pomocy ponieważ:



1. utworzyłem tabelę znajomi.


id znajomi1 znajomi2
0 maniek zosia
1 maniek marysia
2 krysia maniek


2. Mam problem z zapytaniem do bazy przy wyświetlaniu, przeczytałem na forum że należy użyć join ale zabardzo mi to nie wychodzi...(IMG:style_emoticons/default/sad.gif)

  1. $mojprofil='maniek';
  2.  
  3. $znajomi="SELECT * FROM znajomi where znajomi1='$mojprofil' or znajomi2='$mojprofil'";
  4. $idznajomi= mysql_query ($znajomi);
  5. while ($row =mysql_fetch_row($idznajomi))
  6. {
  7. echo $row2[0];
  8. echo $row2[1];
  9. }
  10.  


i wlasnie nie wiem gdzie tu wcisnąć join, wydaje mi się że join łączy 2 bazy czyli np gdybym miał jeszcze baze "uzytkownicy" to bym mógł połączyć ją z bazą "znajomi" ale wydaje mi sie to troche bez sensu.

Teraz tak sobie pomyślalem że trzeba by zrobić warunek że jeśli znajomi2=$mojprofil; to znajomi1=znajomi2 a znajomi2= znajomi1 no nie wiem już czy dobrze myślę...


jeszcze wymyśliłem coś takiego ale też bez skutku.

  1. $znajomi="SELECT * FROM znajomi IF(znajomi1='$profilfriendsnr', znajomi2, znajomi1) AS znaja_sie where znajomi1='$mojprofil' or znajomi2='$mojprofil'";




Ten post edytował neo1986kk 3.04.2010, 23:27:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
dziamber
post
Post #2





Grupa: Zarejestrowani
Postów: 57
Pomógł: 18
Dołączył: 15.04.2009
Skąd: Kwidzyn

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


Postaram się pomóc, sam ostatnio robiłem moduł znajomych więc użyczę Ci trochę kodu:

Tabela w bazie danych:
- id int(11) AUTO_INCREMENT - id wpisów
- id_twoj int(11) - id zapraszającego
- id_znajomy (11) - id zaproszonego

Zakładam także że masz tabelę users, zapytanie będzie wyglądało tak, dla łatwości podam Ci przykład bez JOIN:
  1. $query = 'SELECT * FROM znajomi WHERE id_twoj = "'.$id.'" OR id_znajomy = "'.$id.'"';
  2. // $id to twoje id wyciagniete z tabeli users
  3. // dalej laczysz sie z baza
  4. $user = array();
  5. if($row->id_twoj == $id) {
  6. $obiekt = $row->id_znajomy;
  7. } else {
  8. $obiekt = $row->id_twoj;
  9. }
  10. $query = 'SELECT * FROM users WHERE id = "'.$obiekt.'"';
  11. // laczysz sie z baza
  12. $user[] = $rows['login'];
  13. }
  14. // $row->id_twoj to wynik który zwraca mi klasa mysql
  15. // $row->id_znajomy to także id które zwraca mi mysql
  16. // $row->id_twoj analogicznie do poprzednich zmiennych

Takim to sposobem wyświetlam tylko te wyniki w których id znajomego to nie moje id. Wiem że to trochę zagmatwane i mało efektywne ale na początek dobre. Tablica $user zawiera loginy wszystkich znajomych. Możesz zrobić z nią co chcesz ja akurat przekazuje ją do smartów

Ten post edytował dziamber 4.04.2010, 07:55:02
Go to the top of the page
+Quote Post
luck
post
Post #3





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Takie coś mniej więcej. Z podzapytaniami można wyciągnąć listę przy jednym odwołaniu do bazy. Da radę jeszcze z joinami, ale tak było mi prościej (IMG:style_emoticons/default/winksmiley.jpg) Nie testowane, więc jakieś niedociągnięcia mogą być:
  1. SELECT u.* FROM uzytkownicy u WHERE (u.login IN(SELECT znajomi1 FROM znajomi z1 WHERE znajomi2 = 'TU_LOGIN_USERA')) OR (u.login IN(SELECT znajomi2 FROM znajomi z2 WHERE znajomi1 = 'TU_LOGIN_USERA'))
PS. Poza tym lepiej w tabeli znajomi zapisywać klucze id userów zamiast ich loginy. Chyba, że Twoim kluczem głównym jest właśnie login, ale to i tak lepiej byłoby zrobić w oparciu o typ int i klucze obce.

Ten post edytował luck 4.04.2010, 08:10:16
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


@neo1986kk Twoje zapytanie jest dobre, tylko zwróć uwagę na pętlę while, bo piszesz while($row = ...), a później w bloku pętli masz echo $row2[...]. Oczywiście można to zrobić inaczej:
  1. SELECT znajomi1 AS ziomki FROM znajomi WHERE znajomi2='$mojprofil' UNION SELECT znajomi2 AS ziomki FROM znajomi WHERE znajomi1='$mojprofil'
Wtedy w wyniku będziemy mieć tylko jedną kolumnę, w której znajdą się nasi znajomi.
Go to the top of the page
+Quote Post
lord_borsuk
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 3.08.2008

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


Witam, nie będę zakładać osobnego tematu, problem nieco inny ale ta sama sprawa (IMG:style_emoticons/default/smile.gif)
Hmm szczerze powiedziawszy nie wiem jak opisać ten problem, wiec przejdę do sedna

  1.  
  2. CREATE TABLE IF NOT EXISTS `users` (
  3. `u_ID` int(11) NOT NULL AUTO_INCREMENT,
  4. `u_imie` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  5. `u_nazwisko` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  6. PRIMARY KEY (`u_ID`),
  7. )
  8.  
jest tam tego więcej ale nie jest potrzebne
  1.  
  2. CREATE TABLE IF NOT EXISTS `znajomi` (
  3. `fr_ID` int(11) NOT NULL AUTO_INCREMENT,
  4. `fr_from` int(11) NOT NULL, --id osoba która zaprosiła
  5. `fr_for` int(11) NOT NULL, --id osoby zaproszonej
  6. `fr_time` int(11) NOT NULL,
  7. PRIMARY KEY (`fr_ID`)
  8. )
  9.  


jak w takim układzie znaleźć wszystkich znajomych jednej osoby (IMG:style_emoticons/default/questionmark.gif)
same identyfikatory jest łatwo uzyskać, a da się jednym zapytaniem wydobyć id osoby i jej imię i nazwisko ?
czy trzeba to robić w ten sposób (IMG:style_emoticons/default/questionmark.gif)
  1. SELECT fr_from, u_name, u_sur_name, fr_time FROM znajomi z, users u WHERE z.fr_from=u.u_ID AND fr_from="" ORDER BY fr_time ASC
  2. SELECT fr_for, u_name, u_sur_name, fr_time FROM znajomi z, users u WHERE z.fr_for=u.u_ID AND fr_for="" AND ORDER BY fr_time ASC
  3.  
Go to the top of the page
+Quote Post
neo1986kk
post
Post #6





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


Cytat(mortus @ 4.04.2010, 09:59:41 ) *
  1. SELECT znajomi1 AS ziomki FROM znajomi WHERE znajomi2='$mojprofil' UNION SELECT znajomi2 AS ziomki FROM znajomi WHERE znajomi1='$mojprofil'


U mnie pojawia sie błąd i to poprostu mysql_error
Go to the top of the page
+Quote Post
mortus
post
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


A mógłbyś napisać jaki to błąd, bo przetestowałem zapytanie u siebie i działa.
Go to the top of the page
+Quote Post
neo1986kk
post
Post #8





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


sorry

zrobilem tak: $zapytanie=mysq_query("Select.....");

zamiast

$zapytanie="Select....."

i dlatego nie chcial mi wyświetlić wyników... Pośpieszyłem się zabardzo z tym posetem zamiast popatrzec dokladnie.
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: 24.08.2025 - 22:45