• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[SQL] zapytanie do dwóch baz danych

Object Storage Arubacloud
0 głosów
226 wizyt
pytanie zadane 1 sierpnia 2020 w SQL, bazy danych przez mit2 Nowicjusz (120 p.)

Witam posiadam takie zapytanie sql

("SELECT worlds.id, worlds.nameworld, villages.idworld, villages.namevillage, worlds.openworld, villages.mainvillage FROM worlds INNER JOIN villages WHERE worlds.openworld='1' AND villages.mainvillage='1' AND villages.iduser='$userid'");

posiadam dwie tabele danych:
pierwsza villages:

CREATE TABLE `villages` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `iduser` varchar(255) NOT NULL,
  `idworld` varchar(255) NOT NULL,
  `mainvillage` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

druga worlds :

CREATE TABLE `worlds` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `nameworld` varchar(255) NOT NULL,
  `openworld` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

chcę wyświetlić dostępne światy nie używane przez gracza, przy posiadaniu jednej wioski zapytanie wykonuje się prawidłowo ale gdy użytkownik posiada więcej niż 1 wioskę zapytanie się dubluje, co trzeba zmienić w zapytaniu żeby się nie dublowało

komentarz 2 sierpnia 2020 przez VBService Ekspert (254,260 p.)

Tytuł posta powinien być:

[SQL] zapytanie do dwóch tabel. wink

komentarz 2 sierpnia 2020 przez VBService Ekspert (254,260 p.)

Moja propozycja struktury tabel: wink

Przed ewentualnym skorzystaniem, zrób kopie danych zawartych w tych tabelach.

DROP TABLE IF EXISTS `worlds`;
CREATE TABLE `worlds` (
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name_world` varchar(255) NOT NULL,
    `open_world` varchar(255) NOT NULL
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_polish_ci;

DROP TABLE IF EXISTS `villages`;
CREATE TABLE `villages` (
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `id_user`  int(11) NOT NULL, # id użytkownika, z tabeli user(s)
  `id_world` int(11) NOT NULL, # id z tabeli worlds
  `main_village` varchar(255) NOT NULL,
  FOREIGN KEY (`id_user`) REFERENCES users(`id`),
  FOREIGN KEY (`id_world`) REFERENCES worlds(`id`)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_polish_ci;

 

1 odpowiedź

0 głosów
odpowiedź 1 sierpnia 2020 przez SzkolnyAdmin Szeryf (86,400 p.)
Połącz tabele relacją. Samo worlds INNER JOIN villages nie wystarczy, musisz dopisać, które pola odpowiadają którym. Z konstrukcji twoich tabel wynika, że żadne.
komentarz 1 sierpnia 2020 przez Wiciorny Ekspert (270,590 p.)
dokładnie robiąc złączenia, potrzebujesz aliasów
komentarz 1 sierpnia 2020 przez SzkolnyAdmin Szeryf (86,400 p.)
Akurat te nazwy są unikatowe (id z worlds i idworld z villages), ale oczywiście lepiej zapisać worlds.id = villages.idworlds. Inna sprawa to niezgodność typów: bigint (wystarczy chyba sam int, światów tyle nie będzie) i varchar.

Podobne pytania

0 głosów
1 odpowiedź 2,578 wizyt
pytanie zadane 28 lipca 2017 w SQL, bazy danych przez Mateusz1223 Bywalec (2,440 p.)
0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 12 października 2023 w Offtop przez paweł grabowski Nowicjusz (130 p.)
0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 5 kwietnia 2022 w C# przez Patryk665 Nowicjusz (170 p.)

92,617 zapytań

141,466 odpowiedzi

319,783 komentarzy

61,998 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...