MYSQL - inert i zapytanie

0

Witam mam taki problem. Mam baze danych o strukturze:

 `login` (
  `id_uzytkownika` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `user_pass` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `imie` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `nazwisko` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `nazwa_firmy` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `adres` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `adres_dodatkowy` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `poziom` int(11) NOT NULL,
  `id_grupy` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

Chciałbym żeby do komórki id_grupy można było wpisać kilka wartości np. 1 2 3 4 5
Następnie zapytanie które by pobierało pojedyncze wartości czyli w pętli pierwszy wiersz 1, drugi wiersz 2 itd

W skrócie można to opisać że użytkownik może mieć przypisane więcej niż jedną grupę.

Jak jest jedna wartość to bez problemu działa wyszukuje po wartości ale jak wpisze 2 wartości nic nie zwraca.

Potrzebuje to wykorzystać w systemie PHP. Dokładnie do pobierania informacji który użytkownik ma przypisane jakieś grupy.

Z góry dziękuje za pomoc!

0

Potrzebna ci dodatkowa tabela relacyjna - wiele do wielu

0

a mógłbyś to jakoś wyjaśnić bardziej jak tego dokonać? i dlaczego? bo chciałbym to zrozumieć

0

Przy tym co chcesz osiągnąć oczekujesz że jeden użytkownik może być przypisany do wielu grup, a jednocześnie do pojedynczej grupy przypisane będzie wielu użytkowników. To jest sytuacja "wiele do wielu". Zamodelować można to tylko poprzez dodatkową tabelę - nazywaną relacyjną w której przechowywał będziesz parę (id_użytkowniak,id_grupy)

0

mam tabele uzytkownicy oraz grupy, zeby to dzialalo tak jak pisalem potrzebuje trzeciej tabeli zeby je polaczyc? wystarczy ze tabela bedzie utworzona z indeksem id_user i id_grupy? musze tez znow tutaj wstawic dane tak?

1

Tak. Jeśli użytkownik 1 należy do grup 2 i 5 to musisz wstawić rekordy: (1,2);(1,5). Poczytaj sobie na temat relacji wiele-wiele. Jest na ten temat mnóstwo informacji.

0

Zrobiłem tak jak napisałeś i jest w miare ok. Teraz problem wydaje mi się w zapytaniach do bazy. Ponieważ źle mi się w systemie wyświetla. Wylistowuje wszystkie numerki ale nie pokazuje grupy w kolejnym kroku:

 <?php    

include("db_conn.php");

$sql = "select * from user_grupa where id_uzytkownika = $id_user";
$exec = mysql_query($sql);

while($rol = mysql_fetch_array($exec)){

	$grupa_user = $rol['id_grupy'];
	echo $grupa_user;
}


$query = "select * from grupa where id_grupy = $grupa_user";
$run = mysql_query($query);

while($row = mysql_fetch_array($run)){

	$id_grupy = $row['id_grupy'];
	$nazwa_grupy = $row['nazwa'];
	$typ = $row['typ'];
	$numer = $row['numer'];
	
?>

Ma ktoś może pomysł gdzie jest błąd?

0

A jaki efekt chcesz osiągnąć ?

0

Chciałbym wyświetlić wszystkie grupy które są przypisane do użytkownika.

Dodałem w bazie przykładowe wartości 1 2 3 4 dla usera 1 i 5 6 7 8 dla usera 2, jak wyswietle zmienna pokazują się wszystkie wartości ale w pętli wyświetla tylko jedną pozycję.

1
select 
  g.id_grupy,
  g.nazwa,
  g.typ,
  g.numer 
from 
  user_grupa u
  left join grupa g on g.id_grupy = u.id_grupy
where 
  u.id_uzytkownika = $id_user

1 użytkowników online, w tym zalogowanych: 0, gości: 1