Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Zapytanie MySQL
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam
mam problem z napisanie zapytania. mam coś takiego:

tabela z userami:

id, nazwisko, imie,.......,uprawnienia

1 | Kowalski | Adam | ......... | 1,5,2
2 | Kowalski | Karol| ......... | 2,6,8,3


tabela z gatunkami książek
id_gatunku, nazwa

1 | Thriller
2 | Sensacja
3 | SF
4 | Poradnik
5 | Romans

jak napisać zapytanie aby kowalskiemu pokazało tylko jego gatunki?
nospor
znaczy chcesz powiedziec, ze kolumna UPRAWNIENIA trzyma liste gatunkow dostepnych dla usera? Gratuluje doboru nazwy pola wink.gif

Co do problemu:
stworz prawidlowa strukture danych. Nie zadna kolumna UPRAWNIENIA tylko dodatkowa tabela ktora bedzie miala dwie kolumny:
id_user
id_gatunku

Potem zapytania to bajka
krzesik
Tak masz rację, teraz to wygląda dużo lepiej

tabela z userami: user

id_usera, nazwisko, imie

1 | Kowalski | Adam
2 | Kowalski | Karol


tabela z gatunkami książek: gatunki
id_gatunku, nazwa

1 | Thriller
2 | Sensacja
3 | SF
4 | Poradnik
5 | Romans

tabela dostępu do gatunków: open

id_usera | id_gatunku

1 | 1
1 | 3
1 | 5
2 | 2
2 | 1


tabela z książkami: pozycje
id_pozycji | nazwa | id_gatunku

1 | Jaśko | 3
2 | Stefko | 4

ale z zapytaniem mam kłopot, próbowałem z JOIN-ami, ale.... nic z tego

SELECT * FROM pozycje
LEFT JOIN open ON pozycje.id_gatunku = open.id_gatunku
WHERE id_usera = '$_SESSION[id_czytelnika]' i tutaj pewnie warunek z open, ale jest ich tam kilka....
viking
  1. CREATE TABLE `user` (
  2. `id_usera` INT(11) NOT NULL AUTO_INCREMENT,
  3. `imie` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_520_ci',
  4. `nazwisko` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_520_ci',
  5. PRIMARY KEY (`id_usera`)
  6. )
  7. COLLATE='utf8_unicode_520_ci'
  8. ENGINE=InnoDB;
  9.  
  10. CREATE TABLE `gatunki` (
  11. `id_gatunku` INT(11) NOT NULL AUTO_INCREMENT,
  12. `nazwa` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_520_ci',
  13. PRIMARY KEY (`id_gatunku`)
  14. )
  15. COLLATE='utf8_unicode_520_ci'
  16. ENGINE=InnoDB;
  17.  
  18. CREATE TABLE `open` (
  19. `id_usera` INT(11) NOT NULL,
  20. `id_gatunku` INT(11) NOT NULL,
  21. PRIMARY KEY (`id_gatunku`, `id_usera`),
  22. INDEX `FK_open_user` (`id_usera`),
  23. CONSTRAINT `FK_open_gatunki` FOREIGN KEY (`id_gatunku`) REFERENCES `gatunki` (`id_gatunku`) ON UPDATE CASCADE,
  24. CONSTRAINT `FK_open_user` FOREIGN KEY (`id_usera`) REFERENCES `user` (`id_usera`) ON UPDATE CASCADE
  25. )
  26. COLLATE='utf8_unicode_520_ci'
  27. ENGINE=InnoDB;
  28.  
  29. CREATE TABLE `pozycje` (
  30. `id_pozycji` INT(11) NOT NULL AUTO_INCREMENT,
  31. `id_gatunku` INT(11) NOT NULL,
  32. `nazwa` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_520_ci',
  33. PRIMARY KEY (`id_pozycji`),
  34. INDEX `FK__gatunki` (`id_gatunku`),
  35. CONSTRAINT `FK__gatunki` FOREIGN KEY (`id_gatunku`) REFERENCES `gatunki` (`id_gatunku`) ON UPDATE CASCADE
  36. )
  37. COLLATE='utf8_unicode_520_ci'
  38. ENGINE=InnoDB;
  39.  
  40.  
  41. SELECT
  42. *
  43. FROM open o
  44. INNER JOIN user AS u USING(id_usera)
  45. INNER JOIN gatunki AS g USING(id_gatunku)
  46. INNER JOIN pozycje AS p USING(id_gatunku)
  47. WHERE u.id_usera = 1
  48. ORDER BY u.id_usera;
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.