Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Problem z tabelą łączącą lub zapytaniem
redelek
post
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Witam,

Poprawiam swoją aplikacyjkę i napotkałem na problem. Chciałbym zrobić coś takiego , że jeśli użytkownik należy do danej rodziny to widzi dane, jeśli nie to widzi tylko swoją rodzinę lub rodzinę do której należy.
Troszkę zakręcone ale tak to wygląda

1. Tabela główna

id id_users id_family dane1 dane2 dane3 dane4
1 1 1212 fdss fdsdf fsdfs fsdfs
2 2 1212 dfsfs fdsfds fsdfds fdsfds
3 3 1214 fsdfs fsfsd fsdfs fsdfds
4 4 1215 fdsfsd fdsfds fdsfds fdsfds

2. Tabela users

id name lastname email password
1 piotr jankowski p.jankowski@wp.pl dffsdfsd
2 ania jankowska a.jankowska@wp.pl cdsfsdfsd
3 sabina coś s.cos@wp.pl fdsfsdf
4 natalia ktoś n.ktos@wp.pl fdsfsdfsd

3. Tabela łącząca family

id id_users id_family real_name family_default
1 1 1212 Jankowscy 1
2 2 1212 Jankowscy 1
3 2 1214 COŚ 0
4 2 1215 KTOŚ 0
5 3 1214 COŚ 1
6 4 1215 KTOŚ 1
7 1 1214 COŚ 0
8 4 1214 COŚ 0

Wynik jaki chciałbym otrzymać po zalogowaniu użytkownika piotr z id=1 to dane z tabeli głównej 1

id id_users id_family dane1 dane2 dane3 dane4
1 1 1212 fdss fdsdf fsdfs fsdfs
2 2 1212 dfsfs fdsfds fsdfds fdsfds
3 3 1214 fsdfs fsfsd fsdfs fsdfds

i tak dalej dla róznych użytkowników. Kombinuję jak koń pod górę z zapytaniami i nic (IMG:style_emoticons/default/sad.gif) ostatnie jakie wymyśliłem to
  1. $wynik = mysql_query("SELECT * FROM $T_GIFT
  2. LEFT JOIN $T_USER ON $T_GIFT.id_u_name=$T_USER.id_users
  3. LEFT JOIN $T_FAMYLI ON $T_USER.id_users=$T_FAMYLI.u_id_users
  4. WHERE id_user_booking='0' AND purchased_gift='0' ORDER BY id_gift DESC") or die ("oooo.... GIFT<br />".mysql_error());


Może jeszcze czegoś mi w tabelach brakuje ? (IMG:style_emoticons/default/sad.gif) Proszę o wyrozumiałość, nie zarabiam na tym robię to dla siebie

Dzięki
Redelek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Przeczytaj kolego drugie zdanie, które napisałeś i zauważ, że początek przeczy końcowi. Na pierwszy rzut oka to coś przedobrzyłeś z budową bazy danych (za dużo powtarzających się informacji, a i podejście podejrzewam nie do końca słuszne). Niemniej może wystarczy coś takiego:
  1. SELECT * FROM `tabela_glowna` WHERE `id_family` = (SELECT `id_family` FROM `tabela_glowna` WHERE `id_user` = 1);

Tyle, że tak jak pisałem, za dużo danych się powtarza, a w związku z tym powyższe zapytanie może nie być dobrym rozwiązaniem. Jak dla mnie baza danych jest do przerobienia.
Go to the top of the page
+Quote Post
redelek
post
Post #3





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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



Dodałem tą pre_famyli , tak by ograniczyć wyświetlanie dla róźnych rodzin i pole id_family w tabeli pre_gifts

  1. CREATE TABLE IF NOT EXISTS `pre_famyli` (
  2. `id_famyli` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `u_id_users` tinyint(3) DEFAULT '0' COMMENT 'id uzytkownika',
  4. `u_family_code` varchar(4) COLLATE utf8_polish_ci DEFAULT '0' COMMENT 'kod rodziny wygenerowany podczas rejestracji',
  5. `u_real_name_family` varchar(200) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'prawdziwa nazwa rodziny',
  6. `u_family_def` varchar(1) COLLATE utf8_polish_ci DEFAULT '2' COMMENT 'glowna_rodzina',
  7. PRIMARY KEY (`id_famyli`),
  8. UNIQUE KEY `id_famyli` (`id_famyli`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=9 ;
  10.  
  11. -- --------------------------------------------------------
  12.  
  13. --
  14. -- Struktura tabeli dla tabeli `pre_gifts`
  15. --
  16.  
  17. CREATE TABLE IF NOT EXISTS `pre_gifts` (
  18. `id_gift` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  19. `id_u_name` tinyint(3) DEFAULT '0',
  20. `id_user_booking` tinyint(3) DEFAULT '0',
  21. `id_family` varchar(4) COLLATE utf8_polish_ci DEFAULT NULL,
  22. `small_description` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL,
  23. `purchase_costs` int(10) DEFAULT NULL,
  24. `more_information` text COLLATE utf8_polish_ci,
  25. `links` varchar(255) COLLATE utf8_polish_ci DEFAULT NULL,
  26. `mini_photography` varchar(255) COLLATE utf8_polish_ci DEFAULT 'foto_dir/noimage.png',
  27. `purchased_gift` varchar(1) COLLATE utf8_polish_ci DEFAULT NULL,
  28. `opportunity_to_present` varchar(25) COLLATE utf8_polish_ci DEFAULT 'prezent',
  29. `date_added` date DEFAULT NULL,
  30. `date_execution` date DEFAULT '0000-00-00',
  31. PRIMARY KEY (`id_gift`),
  32. UNIQUE KEY `id_gift` (`id_gift`)
  33. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;
  34.  
  35. -- --------------------------------------------------------
  36.  
  37. --
  38. -- Struktura tabeli dla tabeli `pre_userconf`
  39. --
  40.  
  41. CREATE TABLE IF NOT EXISTS `pre_userconf` (
  42. `id_userconf` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  43. `u_id_userconf` tinyint(3) DEFAULT '0',
  44. `u_registration_date` datetime DEFAULT NULL COMMENT 'data rejestracji uzytkownika',
  45. `u_date_of_last_login` datetime DEFAULT NULL COMMENT 'data ostatniego logowania',
  46. `u_lock_account` varchar(1) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'blokada konta uzytkownika',
  47. `u_user_rights` varchar(1) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'uprawnienia dla uzytkowników',
  48. `u_avatar` blob COMMENT 'obrazek uzytkownika',
  49. PRIMARY KEY (`id_userconf`),
  50. UNIQUE KEY `id_userconf` (`id_userconf`)
  51. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;
  52.  
  53. -- --------------------------------------------------------
  54.  
  55. --
  56. -- Struktura tabeli dla tabeli `pre_users`
  57. --
  58.  
  59. CREATE TABLE IF NOT EXISTS `pre_users` (
  60. `id_users` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  61. `u_name` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'imie uzytkownika',
  62. `u_lastname` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'nazwisko uzytkownika',
  63. `u_email` varchar(50) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'email uzytkownika',
  64. `u_passwords` varchar(32) COLLATE utf8_polish_ci DEFAULT NULL COMMENT 'hasło uzytkownika',
  65. PRIMARY KEY (`id_users`),
  66. UNIQUE KEY `id_users` (`id_users`)
  67. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=5 ;


Zrobiłem twoje zapytanie , ale problem w tym, że jeden uzytkownik może należeć do wielu rodzin. Jeśli należy do wielu to zapytanie się wywala

#1242 - Subquery returns more than 1 row

  1. $wynik2 = mysql_query("SELECT * FROM $T_GIFT WHERE `id_family` = (SELECT `u_family_code` FROM $T_FAMYLI WHERE `u_id_users` = '1') AND `id_user_booking`='0'") or die ("klops2...<br /><br />".mysql_error());


help
Go to the top of the page
+Quote Post

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: 26.09.2025 - 22:58