Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]moduł znajomych
Forum PHP.pl > Forum > Przedszkole
neo1986kk
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...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'";


dziamber
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
luck
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 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.
mortus
@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.
lord_borsuk
Witam, nie będę zakładać osobnego tematu, problem nieco inny ale ta sama sprawa 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 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 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.  
neo1986kk
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
mortus
A mógłbyś napisać jaki to błąd, bo przetestowałem zapytanie u siebie i działa.
neo1986kk
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.