Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> skOMplikowane wyciągniecie danych z bazy
Apo
post
Post #1





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Witam
Ostatnio zaczełem pisać autoryzacje dla frameworka bardzo podobną do tej którą napisał Ludvik, bo moim zdaniem lepszej nie ma (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Struktura tabel wygląda tak:

users - (id, name, password): przechowuje dane o użytkownikach
user_groups(id, uid, gid): przechowuje przynależność danego użytkownika (uid, tabela users) do danej grupy z uprawnieniami (gid, tabela groups)
roles - (id, name): nazwa pojedyńczej roli
groups - (id, name): nazwy istniejących grup
group_roles(id, rid, gid): przechowuje role (rid, tabela roles) przypisane grupą(gid, tabela groups) (tylko identifikatory)

No i teraz chciałem pobrać dane konkretnego użytkownika z bazy, hasło, nick i role.
Czyli musze pobrać hasło, nick następnie odczytać jego przynależność do danej grupy i potem odczytać wszystkie role przypisane tej grupie. Zrobiłem takie coś:

  1. SELECT users.name, users.password, roles.name
  2. FROM users, user_groups, group_roles
  3. LEFT JOIN roles ON roles.id = group_roles.rid
  4. WHERE users.id = 1 AND user_groups.uid = users.id AND group_roles.gid = user_groups.gid


Ale to nie jest poprawne bo wyskakują mi nieodpowiednie role :/ Najlepiej jak zapytanie będzie bardzo wydajne.

Pozdrawiam Apo
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Apo
post
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 1
Dołączył: 2.10.2005

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


Kod
-- phpMyAdmin SQL Dump
-- version 2.8.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Czas wygenerowania: 06 Wrz 2006, 16:23
-- Wersja serwera: 5.0.22
-- Wersja php: 5.1.4
--
-- Baza danych: `apos`
--

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `action_roles`
--

CREATE TABLE `action_roles` (
  `id` int(10) NOT NULL auto_increment,
  `aid` int(10) NOT NULL,
  `rid` varchar(10) NOT NULL,
  `parameters` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10;

--
-- Zrzut danych tabeli `action_roles`
--

INSERT INTO `action_roles` VALUES (1, 1, '1', NULL);
INSERT INTO `action_roles` VALUES (2, 1, '4', NULL);
INSERT INTO `action_roles` VALUES (3, 2, '1', '$news_id');
INSERT INTO `action_roles` VALUES (4, 2, '2', '$news_id');
INSERT INTO `action_roles` VALUES (5, 2, '4', NULL);
INSERT INTO `action_roles` VALUES (6, 3, '1', '$news_id');
INSERT INTO `action_roles` VALUES (7, 3, '3', '$naes_id');
INSERT INTO `action_roles` VALUES (8, 3, '4', NULL);
INSERT INTO `action_roles` VALUES (9, 4, '4', NULL);

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `actions`
--

CREATE TABLE `actions` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(25) NOT NULL,
  `prefether` varchar(30) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--
-- Zrzut danych tabeli `actions`
--

INSERT INTO `actions` VALUES (1, 'NewsViewAction', NULL);
INSERT INTO `actions` VALUES (2, 'NewsEditAction', 'newsPrefether');
INSERT INTO `actions` VALUES (3, 'NewsDeleteAction', 'newsPrefether');
INSERT INTO `actions` VALUES (4, 'NewsAddModAction', 'newsPrefether');

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `group_roles`
--

CREATE TABLE `group_roles` (
  `id` int(10) NOT NULL auto_increment,
  `rid` int(10) NOT NULL,
  `gid` int(30) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--
-- Zrzut danych tabeli `group_roles`
--

INSERT INTO `group_roles` VALUES (1, 1, 1);
INSERT INTO `group_roles` VALUES (2, 2, 2);
INSERT INTO `group_roles` VALUES (3, 3, 2);
INSERT INTO `group_roles` VALUES (4, 4, 3);

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `groups`
--

CREATE TABLE `groups` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(30) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4;

--
-- Zrzut danych tabeli `groups`
--

INSERT INTO `groups` VALUES (1, '');
INSERT INTO `groups` VALUES (2, '');
INSERT INTO `groups` VALUES (3, '');

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `roles`
--

CREATE TABLE `roles` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;

--
-- Zrzut danych tabeli `roles`
--

INSERT INTO `roles` VALUES (1, 'NewsView');
INSERT INTO `roles` VALUES (2, 'NewsEdit');
INSERT INTO `roles` VALUES (3, 'NewsDelete');
INSERT INTO `roles` VALUES (4, 'administrate');

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `user_groups`
--

CREATE TABLE `user_groups` (
  `id` int(10) NOT NULL auto_increment,
  `uid` int(10) NOT NULL,
  `gid` int(10) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;

--
-- Zrzut danych tabeli `user_groups`
--

INSERT INTO `user_groups` VALUES (1, 0, 3);
INSERT INTO `user_groups` VALUES (2, 1, 1);

-- --------------------------------------------------------

--
-- Struktura tabeli dla  `users`
--

CREATE TABLE `users` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  `password` varchar(30) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;

--
-- Zrzut danych tabeli `users`
--

INSERT INTO `users` VALUES (1, 'apo', 'pass');
INSERT INTO `users` VALUES (2, 'noob', 'pass');
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 13:41