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

Zapisywanie danych do SQL


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
10 odpowiedzi w tym temacie

#1 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 11.11.2013 17:23

Witam, dawno mnie nie było na tym forum, ale wziąłem się za nowy serwer i przychodzę z prośbą o pomoc :)

 

Nigdy wcześniej nie używałem SQL - nVault wystarczał.

Postanowiłem się przerzucić na bazy danych, bo w końcu każdy ogarnięty hosting dodaje bazę za darmo (pamiętne czasy, kiedy wszędzie było to 10zł / mc zarówno za FD jak i MySql)

 

Ogólnie problem mam z zapisem danych.

Kiedy używam:

Spoiler

To istniejące wpisy rzeczywiście ustawia tak jak chcę, ale nie tworzy nowych wpisów. Tzn - nie ma Cię w bazie - nie zostaniesz zapisany.

 

Drugim sposobem:

Spoiler

Jest na odwrót. Dodaje nowy wpis, ale nie nadpisuje istniejących.

 

Jak sobie z tym poradzić? Gdy przeglądam pluginy to zawsze używany jest tylko 1 sposób, a działa :)

 

 


  • +
  • -
  • 0

#2 Gh0st

    :)

  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 11.11.2013 17:37

Należy sprawdzić wcześniej, jeśli wpis nie istnieje to należy go utworzyć metodą INSERT natomiast jeśli już istnieje, winno się go zmodyfikować poleceniem UPDATE


  • +
  • -
  • 1

#3 ^Grzyboo

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 11.11.2013 17:44

A jest jakaś jedna komenda na sprawdzenie, czy już gracz ma wpis?

 

 

Ok, już sobie poradziłem. Użyłem SQL_MoreResults(Query) podczas wczytywania.

Póki co wszystko wygląda na działające. Dzięki za pomoc :)


Użytkownik ^Grzyboo edytował ten post 11.11.2013 18:06

  • +
  • -
  • 0

#4 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 11.11.2013 18:06

Proszę bardzo:

http://amxx.pl/topic...in-baza-danych/

lepiej Ci tego nie wytłumaczymy, bardzo dobry poradnik


  • +
  • -
  • 1
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#5 Leihto

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:452
  • Lokalizacja:Rabka
Offline

Napisano 11.11.2013 18:08

 Masz 2 wyjścia:

1. Wykonaj zapytanie SELECT i sprawdź czy są jakieś wyniki: Jeśli tak, wykonaj zapytanie update, jeśli nie wykonaj zapytanie INSERT

2. Jedno zapytanie: INSERT + ON DUPLICATE

INSERT INTO `tabela` ( `kluczid`, `klucz1`, `klucz2` ) VALUES ( 'wartosc', 'wartosc1', 'wartosc2' ) ON DUPLICATE KEY UPDATE `klucz1` = VALUES( `klucz1` ), `klucz2` = VALUES( `klucz2` )

  • +
  • -
  • 2
Portek: Za 20zł, to ja nawet notatnika nie otworze..

Nowe portfolio. Ciekawe artykuły, ciekawe przykłady: WojtusDEV.pl

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 11.11.2013 18:28

Selecta nie używaj, wtedy musisz użyć 2 zapytań, zamiast jednego... Lepiej użyć INSERT z dodatkiem ON DUPLICATE KEY UPDATE. http://amxx.pl/topic...in-baza-danych/ zainteresuj się tym.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#7 ^Grzyboo

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 11.11.2013 18:46

Zrobiłem ogólnie tak:

 

client_putinserver > WczytajDane > jeśli nie ma danych użyj INSERTA, czyli stwórz wpis z 0 expa itd // jeśli są dane - wczytaj exp

A potem przy zapisywaniu już jest tylko UPDATE

 

Chyba tak też jest ok?


  • +
  • -
  • 0

#8 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.11.2013 19:18

Selecta nie używaj, wtedy musisz użyć 2 zapytań, zamiast jednego... Lepiej użyć INSERT z dodatkiem ON DUPLICATE KEY UPDATE. http://amxx.pl/topic...in-baza-danych/ zainteresuj się tym.

Czasami select jest potrzebny, zresztą jakiś czas temu na pw pisałem Ci do czego mi jest potrzebny.
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#9 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 12.11.2013 08:15

Sebul, oczywiście do odczytu danych jest potrzebny, ale po co przy zapisie odczytywać również dane? zwykle odczytujemy gdy gracz wchodzi, a zapisujemy gdy wychodzi, nabije level, stanie się cośtam lub po prostu co jakiś czas, wtedy nie musimy ponawiać odczytu.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#10 ^Grzyboo

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 12.11.2013 16:49

Skorzystam tutaj i nie będę tworzyć nowego, głupiego tematu.

Pytanie może głupie: ale jak pobrać całkowitą liczbę wpisów ( rzędów ), lub pole z kolumny 'id' z ostatniego wpisu

Potrzebuje tego do wyznaczenia całkowitej liczby graczy w komendzie /rank


  • +
  • -
  • 0

#11 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 12.11.2013 18:53

id jest bez sensu :) czasem usuniesz jakieś ID, a ono już nie zostanie ponownie zapełnione. Ilość możesz pobrać poprzez

SELECT COUNT(id) FROM tabela

Jednak gdy pobierasz np 30 graczy pierwszych od razu do tabelki (czy ileśtam) to wykonywanie 2 zapytania do pobrania ogólnej ilości graczy jest troszkę nieefektywne. Dlatego polecam zrobić to w jednym zapytaniu:

SELECT tu,musisz,wymienic,dokladnie,kolumny,do,pobrania, (SELECT COUNT(id) FROM tabela) AS `count` FROM tabela

Takie coś doda Ci dodatkową kolumnę o etykiecie count do każdego wiersza, będzie w niej wpisane dokładnie to samo w każdym wierszu, ale to mało ważne :)

 

Jeśli chcesz pobrać ranking dowolnego gracza z bazy, na to też jest fajny trick (z uwzględnieniem remisów)


  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





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

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