Witam, mam taki problem a raczej zagwostkę. Otóż chciałbym wczytać dane z bazy danych z dwóch różnych tabel. Zakładając że baza jest na zewnątrz, używam funkcji threaded (nie wiem jak to po polsku nazwać, kumaci zrozumieją ), i wszystkie dane wczytać na raz, aby nie łączyć się nie potrzebnie dwa razy z bazą, jest taka opcja? I jak te dane potem odpowiednio wyciągnąć do np. zmiennych?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|

Wczytyanie danych z bazy "na raz"

Najlepsza odpowiedź _McHappy, 16.07.2017 10:19
Hmmm. W tej sytuacji kombinowałbym z operatorem UNION ALL lub UNION z dopełnieniem NULL-kolumnowym.
Przejdź do postu
#1
Napisano 15.07.2017 19:02
#2
Napisano 15.07.2017 20:43
Użytkownik _McHappy edytował ten post 15.07.2017 20:49
#3
Napisano 15.07.2017 22:59
Jednak jeżeli chodzi o kwerendy wątkowane <dokumentacja>:
bool AtomicResult::NextResultSet()
{
return false;
}
Zatem rozchodzi się o uzyskanie wyników tylko w jednej tabeli.
Optymalizacja jest w tym przypadku zależna od struktury tabel, z których chcesz pozyskiwać dane oraz ilości zwróconych rekordów...
#4
Napisano 16.07.2017 07:02
P.S. Chodzi tu o SourceModa, ale tam podobnie - nie działa na kwerendach wątkowych.
Chyba muszę 2 razy użyć SQL_TQuery, ponieważ mam jedną tabelę z graczami i dla nich danymi typu ranga, staty itd., druga tabela to misje która posiada listę misji, trzecia tabela to misje gracza połączona z tabelą misję i gracze - w niej sprawdzam którą misję gracz już wykonał
Myślałem ew. na wczytywaniu misji z pliku, ale chyba dużo mi to nie da, bo tak czy siak muszę wczytywać 2 razy dane z bazy.
#5
Napisano 16.07.2017 10:19 Najlepsza odpowiedź
#6
Napisano 16.07.2017 14:38
jak używasz kluczy obcych to możesz przez INNER JOIN połączyć i w jednym zapytaniu 2 tabele wczytac
#8
Napisano 16.07.2017 14:51

Użytkownik _McHappy edytował ten post 16.07.2017 14:53
#9
Napisano 16.07.2017 16:25
UNION ALL podejrzewam że pyknie, chodzi o to że mam 3 tabele
gracze: id_gracza, steamid, ranga, pkt_stat - każdy gracz ma swój wpis w tej tabeli
misje: id_misji, nazwa_misji
misje_graczy: id_gracza, id_misji, czy_zrobil (bool).
Zwrócić myślałem od razu:
range, pkt stat, id_misji, czy_zrobil dla danego steamid
#10
Napisano 16.07.2017 16:45

#12
Napisano 16.07.2017 23:01
ja pobieram dane z jednej i drugiej tabeli wedluh kolumny ID w ten sposob
SELECT a.*, b.* FROM `tabela` AS `a` INNER JOIN `tabela2` AS `b` ON a.id = b.id
#13
Napisano 16.07.2017 23:23

UNION można zastosować, gdy masz do wczytania np. listę misji wraz z opisami i jednocześnie listę rang z wymogami (z kompletnie innej tabeli) itd. Trzeba jedynie zadbać o równą ilość kolumn zwracaną przez obie kwerendy jak i te same typy danych analogicznych kolumn.
Użytkownik _McHappy edytował ten post 16.07.2017 23:26
#14
Napisano 17.07.2017 16:51
Tak tylko nie dopowiedziałem -wpisów w tabeli misje_graczy dla danego id_gracza może być kilka, relacja wiele do wielu między misjami a graczami, więc chyba nie przejdzie dobrze myślę?
#15
Napisano 17.07.2017 17:10
Hmmm. Możesz użyć wspomnianego INNER JOIN, lecz zestaw wynikowy zwracany przez kwerendę będzie niepotrzebnie powiększony (do każdego rekordu misji będą dopisane kolumny o stałej wartości).
UNION ma to do siebie, że rekordy są zwracane odpowiednio "jeden pod drugim". Dobrze jest też indeksować podgrupy rekordów (kolumna z ID wyniku - 1 dla wyników misji, 2 - dla statystyk gracza itp, kwestia ułatwienia przechwycenia wyników do zmiennych).
#16
Napisano 17.07.2017 17:39
To walnę UNION - pierwszy zawsze będzie wpis z tabeli gracze, reszta to wpisy z tabeli misje_graczy - jakoś pokombinuję, dzięki za podpowiedzi, do zamknięcia.
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych