Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie, ale jak ?
Nookie
post 23.06.2004, 08:07:24
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 15.09.2003

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


Witam,

mam pytanie jak zrobic takowe zapytanie..

mam dwie tabele jedna z uzytkownikami druga z komputerami
w tabeli uzytkownikow mamy pole id_komputera, i bedzie to pole typu string, bedzie przechowywac id rekordow z tabeli komputery rozdzielone pipe'em |

i teraz jak zadac zapytanie w mysqlu zeby pokazal dla danego uzytkownika wszystkie komputery ktore sa pod niego podpiete w jednym zapytaniu ?
czy trzeba pettli ? a jesli tak to jakiej ? bo wyciagnac ze stringa id_komputerow bede potrafil korzystajac x explode i powiedzmy to przechowywac w jakiejs tablicy tylko jak dac zapytanie zeby pokazal to o co mi biega smile.gif


dzieki za wszelka pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
stoprocent
post 23.06.2004, 08:15:50
Post #2





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 17.05.2003
Skąd: Kraków , Londyn

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


A jak odzielone sa id komputerow w tabelio user bo z tego co czytam to 1 userowi moze byc kilka przyporzadkowanych .
np jesli sa odzielone przecinkiem to mozesz zrobic tak .

  1. <?php
  2.  
  3. $query = mysql_query(&#092;"SELECT * FROM users ORDER BY id DESC\");
  4.  while ($row = mysql_fetch_array($query)) 
  5.  
  6. {
  7.  
  8.  echo 'Komputery przypozadkowane '.$row['nazwa_usera'].' :<br />';
  9.  
  10. $ide = explode(',' $row['id_komputera']);
  11.  
  12.  foreach($ide as $id_komp)
  13.  
  14. {
  15.  
  16. $query_foreach = mysql_query(&#092;"SELECT * FROM komputery WHERE id='\".$id_komp.\"' \");
  17.  
  18.  $komputer = mysql_fetch_array($query_foreach);
  19.  
  20. echo $komputer['nazwa'].'<br />';
  21.  
  22.  }
  23. }
  24.  
  25. ?>


Ten post edytował nasto 23.06.2004, 08:30:45


--------------------
Go to the top of the page
+Quote Post
FiDO
post 23.06.2004, 13:28:25
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


To rozwiazanie jest glupie... Proponuje przeprojektowac baze.
Widze, ze chcesz tutaj osiagnac relacje wiele do wielu (jeden uzytkownik moze miec wiele komputerow przypisanych i jeden komputer moze miec wielu uzytkownikow).
Takie relacje robi sie z pomoca tabeli pomocniczych. W Twoim przypadku bedzie to wygladalo mniej wiecej tak:
Kod
uzytkownicy:  ID | reszta pol...
komputery  :  ID | reszta pol...
uzytkownicy_komputery: ID_komputera | ID_uzytkownika

Teraz jak zapisujesz informacje do bazy to w nastepujacej postaci:
Kod
ID_komputera | ID_uzytkownika
1              1
1              2
1              3
2              1
3              1

co znaczy, ze komputerowi o ID=1 pr zypisane jest trzech userow (ID kolejno 1,2,3) i dodatkowo userowi o ID=1 sa przypisane jeszcze kompy 2 i 3.

Wybranie teraz wszystkich kompow nalezacych do konkretnego usera jest proste, bez zadnych petli:
  1. SELECT k.* FROM komputery AS k, uzytkownicy_komputery WHERE k.ID = ID_komputera AND ID_uzytkownika = [tutaj_podajesz_id_usera]


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Nookie
post 23.06.2004, 17:21:47
Post #4





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 15.09.2003

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


Jedno i drugie rozwiazanie jest, ok..
drugie wymaga zrobienie dodatkowej tabeli.. co akurat w moim przypadku nie jest chyba konieczne..

komputerow nie powinno byc duuzo wiec petla powinna wystarczyc..

ale przy duuuzych ilosciach 2 rozwiazanie byloby na pewno wygodniejsze !


dzieki piekne chlopaki !
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: 25.07.2025 - 07:54