Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

MySQL, pytania nt. bazy danych.


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 GoldeN

    Wszechmogący

  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 15.04.2011 23:05

Witam, mam do Was pytania.

1. Jak mogę sprawdzić ile jest rekordów np po id?
2. Jak zrobić autonumeracje? (AUTO_INCREMENT jakoś mi nie działa)
3. Jak mogę trzem rekordom przypisać id = 1?

4. Mam taką zmienną: new zmienna[33][128]; Jak mogę do niej przypisać tekst taki jaki gracz wpisze w grze? (Jak wpisać to wiem, ale nie wiem jak przypisać).
5. Jak potem pobrać z bazy dane w formie tekstu i przypisać je tej zmiennej?

Użytkownik GoldeN edytował ten post 15.04.2011 23:23


#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 15.04.2011 23:45

0. najpierw obczaj SQL
1. SELECT COUNT(*) FROM table WHERE id=X
2. pole auto increment powinno być kluczem głównym (PRIMARY KEY)
3. UPDATE + WHERE

4. clcmd+read_argv lub read_args
5. SELECT (polecam SQL_ThreadQuery) + SQL_ReadResult
  • +
  • -
  • 1

#3 GoldeN

    Wszechmogący

  • Autor tematu
  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 15.04.2011 23:58

A ja mogę zrobić dwie tabele, w jednej zapisać np:

ID | Nazwa | Poziom

A w drugiej:

ID | Nick

Gdzie ID w pierwszej będzie identyczne jak w drugiej?


4.

Mam taki kod:

public g_command(id){     
new szKey[32];
read_argv(1, szKey, sizeof szKey - 1);
remove_quotes(szKey);

new name = str_to_num(szKey);

format(name[id], 127, "%d", name);
}


gdzie name wygląda tak:

new name[33][128];

Oraz g_command wywołana jest w message mode, niestety name[id] nie przybiera tekstu który wpisze gracz.

Użytkownik GoldeN edytował ten post 16.04.2011 00:01


#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 16.04.2011 00:05

Jasne, że tak. To jest podstawa relacyjnej bazy danych. Poczytaj o kluczu obcym FOREIGN KEY. Przykład takich relacji możesz znaleźć m.in. w tym pluginie: Na deathrun`a staty i rank - AMXX.pl: Support AMX Mod X

dlaczego zapisujesz liczbę w stringu? XDD
name[id] = str_to_num(szKey);

a to że nie działa zależy od tego jak rejestrujesz komendę i jak ją wywołujesz
  • +
  • -
  • 1

#5 GoldeN

    Wszechmogący

  • Autor tematu
  • Zbanowany

Reputacja: 69
Pomocny

  • Postów:676
  • Imię:Kamil
  • Lokalizacja:DG
Offline

Napisano 16.04.2011 00:20

Nie myślę już o tej godzinie. xD

Mianowicie chciałem uzyskać to:

public g_command(id){     
new text[192]
read_argv(1,text,191)

format(name[id], 255, "%s", text);
}


Co do bazy danych, może jest jakiś inny sposób, by trzech graczy miało takie samo ID i jak u jednego gracza zmienia się pewna wartość rubryki w mysql to każdemu z tej grupy ID się zmienia? Bo tego co jest w DR to nie ogarnę. ; /


@Edit:

Wypociłem coś takiego:

public MySql_Init()
{
gTuple = SQL_MakeDbTuple(Host,User,Pass,Db)

// ok, we're ready to connect
new ErrorCode,Handle:SqlConnection = SQL_Connect(gTuple,ErrorCode,g_Error,charsmax(g_Error))
if(SqlConnection == Empty_Handle)
// stop the plugin with an error message
set_fail_state(g_Error)

new Handle:Queries
// we must now prepare some random queries
Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS guild (guild_name varchar(64),depo INT(11))")



if(gTuple == Empty_Handle){
set_fail_state("Cant create connection tuple");
}

new iErr, szError[32];
new Handle:link = SQL_Connect(gTuple, iErr, szError, 31);
if(link == Empty_Handle){
log_amx("Error (%d): %s", iErr, szError);
set_fail_state("Cant connect to database");
}

new Handle:query;
query = SQL_PrepareQuery(link,
"CREATE TABLE IF NOT EXISTS `house`( \
id INT(11) UNSIGNED AUTO_INCREMENT,\
house_name VARCHAR(32) NOT NULL, \
ilosc VARCHAR(32) NOT NULL, \
PRIMARY KEY(id) \
FOREIGN KEY(`nick`) REFERENCES `users`(`nick`) ON DELETE CASCADE ON UPDATE CASCADE
)");
SQL_Execute(query);
SQL_FreeHandle(query);

query = SQL_PrepareQuery(link,
"CREATE TABLE IF NOT EXISTS `users`( \
mid INT(11) UNSIGNED AUTO_INCREMENT,\
nick VARCHAR(32) NOT NULL, \
PRIMARY KEY(mid) \
)");
SQL_Execute(query);
SQL_FreeHandle(query);

SQL_FreeHandle(link);
}


Co dalej? ; dd Dobrze to jest wogóle?

@Edit2:

Nie wiem jak to zrobić. Ale chciałbym, by w tabeli "house" były wpisy pojedyncze, każdy wpis z innym ID, np:

Rekord 1:
id = 1 | house_name = cos | ilosc = 0

A w tabeli "users" by były trzy rekordy \, by te trzy rekordy miały identyczne "mid" oraz taki same jak ten pierwszy rekord w tabeli "house"

Dodano 16 kwiecień 2011 - 22:49:
Dobra, już wiem o co mi chodzi, ale nie wiem jak to zrealizować. xD

Tabela Houses:

ID | Name | Cos

Tabela Users:

ID | User | Access


Teraz jak zrobić, że jak już jest rekord w tabeli houses o jakimś ID, to jak przydzielić z Users to ID z tej tabeli Houses? Tak jak jest przydzielanie w AMXBANS adminów do serwerów.

Użytkownik GoldeN edytował ten post 16.04.2011 01:14


#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 17.04.2011 10:11

jak robisz insert to jako id podaj numer ID z tabeli houses :) proste
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych