![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam sobie taka tabelę
|id|zaprasza|zaproszony| pola zaprasza i zaproszony są parą id użytkowników w zależności kto kogo zaprosił tam znajduje się jego id jest to para tak zwanych przyjaciół żeby ich wydobyć używam takiego prostego zapytania:
Ale teraz potrzebuje wspólnych przyjaciół dwóch użytkowników mowie sobie nic prostszego i sięgam do książki SQL-a aby znaleźć komendę mi potrzebną no i jest
przekrój dwóch tabel - ale niestety MySQL Jej nie obsługuje. No i się zaciąłem. Może ktoś podsunie pomysł z której strony to ugryźć. -------------------- Sztuką jest widzieć to czego nie widać.
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Czyli rozumiem masz coś takiego:
zaprosił||zaproszony 1||2 1||3 1||4 9||3 9||4 9||7 x||n I chcesz wszystkich zaproszonych zarówno przez usera 1, jak i 9, czyli zaproszonych o numerach 3 oraz 4?
W ile masz ile razy został zaproszony przez tych dwóch (lub więcej). |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Pozwól że zmodyfikuje troszkę twój przykład
1||2 3||1 1||4 9||3 9||4 9||7 x||n Zamieniłem drugi wiersz w kolejności i teraz powiedzmy potrzebuje wspólnych znajomych usera 1 i 9 czyli wynik powinien być: 3 i 4, nigdy nie wiem czy user zaprosił czy został zaproszony równie dobrze ten sam wynik powinien być jak zmienimy kolejność jeszcze jednego wiersz czyli nie 9 zaprosił 4 tylko na odwrót: 1||2 3||1 1||4 9||3 4||9 9||7 x||n Ten post edytował patryczakowy 27.05.2009, 15:13:37 -------------------- Sztuką jest widzieć to czego nie widać.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Hmmm, niezależnie od kolumn? To będzie trudniejsze - łatwo to zrobić w PHP ale trzeba by zrzucić do tablicy całą tabelę, co nie jest za dobre... Moim zdaniem najłatwiej chyba wykonać to zapytanie dwa razy, raz za punkt wyjścia przyjmując zaproszonych, raz zapraszających, albo coś takiego:
- unionem pojechać i zrzucić wszystkich, jeśli któryś się powtarza więcej niż raz, to jest to wspólny znajomy (w PHP teraz to obrobić). |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki szkoda że niemożna zrobić tego samym sql.
Jeszcze jedno mam pytanie czy w php jest jakaś gotowa funkcja która wypluje mi powtarzające się wiersze bo jak narazie znalazłem tylko usuwanie powtarzających wierszy? -------------------- Sztuką jest widzieć to czego nie widać.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
http://pl2.php.net/manual/pl/book.array.php - nie widać. Moim zdaniem można napisać własną i użyć array_map, albo zrobić to jeszcze prościej - bezpośrednio w pętli odbierając dane z mysql:
- dane są już posortowane, więc wystarczy sprawdzić, czy nowy wiersz = stary i jeśli tak, to wrzucić ID do tablicy. Może da się to jakoś zrobić w mysql, ale pewnie za cenę znacznego skomplikowania zapytania lub użycia podzapytań. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki za zainteresowanie tematem.
Tak właśnie zrobiłem kolejny raz przekonałem się że najprostsze pomysły są najlepsze, a kombinowałem z funkcjami na tablicach aby wprowadzić sobie jakieś urozmaicenie, coś nowego się dowiedzieć (tak mam czasami jak mam troszkę wolnego czasu). -------------------- Sztuką jest widzieć to czego nie widać.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 10:08 |