Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Relacja 1:1
tadeurz
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


Nie mogę sobie poradzić z prostą rzeczą, głupią relacją 1:1.
Rozwiązanie znałazem w 2 zapytaniach, ale coś czuje że można to zrobić w lepiej.

Mam 2 tabele:
  1. //tabela user_box user_id(PRIMARY) plus setka pól z nazwami jako zwykłe cyfry. W każdej szufladzie(box) znajduje się ID prezentu.
  2. user_box -> user_id,1,2,3,4....97,98,99,100
  3. gift -> id,type,who


Chce pobrać wszystkie szufladki i typ prezentu który się tam znajduje.

Ten post edytował tadeurz 11.06.2013, 23:43:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tadeurz
post
Post #2





Grupa: Zarejestrowani
Postów: 70
Pomógł: 1
Dołączył: 25.04.2009

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


Nawet nie muszę zaglądać do manuala.

JOIN LEFT z 2 upośledzeniami będzie wyglądało tak:
  1. SELECT
  2. user_box.*
  3. gift.type,
  4. FROM
  5. user_box
  6. LEFT JOIN gift ON
  7. gift.id = user_box.1 OR
  8. gift.id = user_box.2 OR
  9. gift.id = user_box.3 OR
  10. gift.id = user_box.4 OR
  11. gift.id = user_box.5 OR
  12. .........
  13. gift.id = user_box.98 OR
  14. gift.id = user_box.99 OR
  15. gift.id = user_box.100
  16. WHERE user_box.id = ?

Trudno to nazwać problemami raczej upośledzenia mySQL (IMG:style_emoticons/default/biggrin.gif)
1. Przy złączeniu trzeba wypisać pola 0-100. Zamienienie tego na SELECT ? WHERE id IN (SELECT? ) nic nie da bo pola i tak trzeba będzie wypisać (w klauzuli IN będziemy chcieli wszystkie pola BOXów oprócz id(PRIMARY) a nie da się tego zrobić inaczej niż wypisać).
Przy 2 SELECT używam pętli, więc na jedno wychodzi.
2.Tabele wynikowa będzie cholernie wielka. Napisze kilka przykładowych WIERSZÓW:
1. (ID) _ (ID_GIFT_1) ? (ID_GIFT_2) _ (ID_GIFT_3) - ... - (ID_GIFT_98) _ (ID_GIFT_99) _ (ID_GIFT_100) _ (TYP_GIFT_1)
2. (ID) _ (ID_GIFT_1) ? (ID_GIFT_2) _ (ID_GIFT_3) - ... - (ID_GIFT_98) _ (ID_GIFT_99) _ (ID_GIFT_100) _ (TYP_GIFT_2)
3. (ID) _ (ID_GIFT_1) ? (ID_GIFT_2) _ (ID_GIFT_3) - ... - (ID_GIFT_98) _ (ID_GIFT_99) _ (ID_GIFT_100) _ (TYP_GIFT_3)
....
99. (ID) _ (ID_GIFT_1) _ (ID_GIFT_2) _ (ID_GIFT_3) - ... - (ID_GIFT_98) _ (ID_GIFT_99) _ (ID_GIFT_100) _ (TYP_GIFT_99)
100. (ID) _ (ID_GIFT_1) _ (ID_GIFT_2) _ (ID_GIFT_3) - ... - (ID_GIFT_98) _ (ID_GIFT_99) _ (ID_GIFT_100) _ (TYP_GIFT_100)

JOIN LEFT ? Może tutaj jest błąd struktury bazy danych, którą trzeba inaczej zaprojektować i wtedy cały problem zniknie.
Mam użytkowników którzy mają plansze 10x10 -> na niej chowają prezenty. Pozostali gracze strzelają w pole odkrywając prezent który się tam skrywa. Zrobienie z tego 1 tabeli w której jest pole i od razu GIFT jest rozwiązaniem na siłę. Każdy strzelony GIFT jest zapisywany, wiec musiałbym po trafieniu go, przenieś do nowej tabeli.

Ten post edytował tadeurz 12.06.2013, 13:29:05
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: 4.10.2025 - 21:35