Jump to content
  • 0

[Help] Erroare cand editez in baza de date


Rayan

Question

7 answers to this question

Recommended Posts

  • 0

Da, sa faci mai multe tabele pentru a salva astfel de date. Si sa faci relatii intre ele printr-un forgein key. Va trebui sa te uiti peste niste tutoriale MySQL pentru a invata aceste relatii, eu inca le invat, mai ales ca de multe ori sunt mult mai eficiente decat sa ai un tabel urias. 

Mai ales daca ai ajuns la 1000 fields intr-un tabel de destul de grav sincer, pentru ca e urias. Singura solutie e sa spargi acel tabel "users" in mai multe(ma refer sa muti de exemplu cele cu crime intr-un alt tabel , sau mai stiu eu ce astfel de date mai ai care pot fi separate de tabelul users)

Si ca si sfat , sa folosesti mysql_pquery cand vei face aceste query de a incarca din diverse tabele pentru a putea incarca mai rapid si eficient datele. Pentru ca daca vei folosi mysq_tquery va dura oa vreme ca fiecare sa se execute in ordine, iar daca vei folosi mysql_query , ei bine , vei cam ingheta putin scriptul. Si daca vei avea mai multi playeri care se conecteaza i nacelasi timp, nu vreau sa ma gandesc.

 

Deci sfatul meu, separa cateva lucuri de users in alte tabele si fa relatii de forgein key intre ele (adica intre tabele alea si tabelul users care va contine referinta la playeri) si foloseste mysql_pquery pentru a fae query-urile de SELECT pentru a putea incarca datele in paralel si sa fie putin mai eficient. Dar nu folosi mysql_pquery pentru restu, foloseste mysql_tquery.

 

Edit: Sper ca ai inteles ceva , pentru ca nu sunt chiar atat de bun la scris explciatii.

Edited by Banditul
  • Upvote 1
Link to comment
Share on other sites

  • 0
Acum 22 ore, Banditul a spus:

Arata cum ai structura la acel Object37 , cum e definit etc in baza dedate.Ca la el pare sa fie problema.

Edit1: Nvm , amu am vazut poza a doua....Hmm

Edit2: E o posibiliate sa aibe legatura cu Object37

si cum as putea rezolva?

Edited by Rayan
Link to comment
Share on other sites

  • 0
Acum 22 ore, Banditul a spus:

Arata cum ai structura la acel Object37 , cum e definit etc in baza dedate.Ca la el pare sa fie problema.

Edit1: Nvm , amu am vazut poza a doua....Hmm

Edit2: E o posibiliate sa aibe legatura cu Object37

faza e ca am modificat eu ceva in baza de date, am marit pCrime de la 3 la pCrime20, si defiecare data cand intru sa editez un cont in baza de date de la 'users' imi da accest mesaj informativ cu galben:

Warning: a form on this page has more than 1000 fields. On submission, some of the fields might be ignored, due to PHP's max_input_vars configuration

EDIT: mda, observ, am sters toate pCrime20 si am lasat doar pana la pCrime3, si daia era.. gen eu aveam asa in gm:

poza: http://imgur.com/a/uhBwz 

si am sters toate alea pCrime de la 4 (inclusiv) la 20 (pCrime) al lasat doar 1,2,3 , si faza e ca acum ca crimele comise de jucatori apar salvate doar 1,2,3 si toate pana la 20, exista alta modalitate sa rezolv?

Edited by Rayan
Link to comment
Share on other sites

  • 0
La 7/16/2017 la 20:04, Banditul a spus:

Da, sa faci mai multe tabele pentru a salva astfel de date. Si sa faci relatii intre ele printr-un forgein key. Va trebui sa te uiti peste niste tutoriale MySQL pentru a invata aceste relatii, eu inca le invat, mai ales ca de multe ori sunt mult mai eficiente decat sa ai un tabel urias. 

Mai ales daca ai ajuns la 1000 fields intr-un tabel de destul de grav sincer, pentru ca e urias. Singura solutie e sa spargi acel tabel "users" in mai multe(ma refer sa muti de exemplu cele cu crime intr-un alt tabel , sau mai stiu eu ce astfel de date mai ai care pot fi separate de tabelul users)

Si ca si sfat , sa folosesti mysql_pquery cand vei face aceste query de a incarca din diverse tabele pentru a putea incarca mai rapid si eficient datele. Pentru ca daca vei folosi mysq_tquery va dura oa vreme ca fiecare sa se execute in ordine, iar daca vei folosi mysql_query , ei bine , vei cam ingheta putin scriptul. Si daca vei avea mai multi playeri care se conecteaza i nacelasi timp, nu vreau sa ma gandesc.

 

Deci sfatul meu, separa cateva lucuri de users in alte tabele si fa relatii de forgein key intre ele (adica intre tabele alea si tabelul users care va contine referinta la playeri) si foloseste mysql_pquery pentru a fae query-urile de SELECT pentru a putea incarca datele in paralel si sa fie putin mai eficient. Dar nu folosi mysql_pquery pentru restu, foloseste mysql_tquery.

 

Edit: Sper ca ai inteles ceva , pentru ca nu sunt chiar atat de bun la scris explciatii.

am inteles, insa nu prea ma pricep la chestiile cu  baza de date, insa, imi poti da vreo idee cum sa fac sa se salveze diferit fata de acum e acum, crimele comise de jucatorul respectiv? (adica cele date cu /su , /call 112, first degree, stii tu)...pentru ca nu am nicio idee. ar trebui sa fac un alt Tabel cu Crimele comise de jucatori? gen cum e tabelul 'users' ?

Link to comment
Share on other sites

  • 0
Spoiler

-- phpMyAdmin SQL Dump
-- version 4.7.0
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Jul 18, 2017 at 01:56 PM
-- Server version: 10.1.24-MariaDB
-- PHP Version: 7.1.6

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `exemplu`
--

-- --------------------------------------------------------

--
-- Table structure for table `crimes`
--

CREATE TABLE `crimes` (
  `ID` int(10) UNSIGNED NOT NULL,
  `user_id` int(11) UNSIGNED NOT NULL,
  `Crima1` varchar(24) NOT NULL,
  `Crima2` varchar(24) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `crimes`
--

INSERT INTO `crimes` (`ID`, `user_id`, `Crima1`, `Crima2`) VALUES
(1, 1, 'User1', 'User2');

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE `users` (
  `ID` int(10) UNSIGNED NOT NULL,
  `Name` varchar(24) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`ID`, `Name`) VALUES
(1, 'Banditul');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `crimes`
--
ALTER TABLE `crimes`
  ADD PRIMARY KEY (`ID`),
  ADD KEY `user_id` (`user_id`);

--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`ID`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `crimes`
--
ALTER TABLE `crimes`
  MODIFY `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- Constraints for dumped tables
--

--
-- Constraints for table `crimes`
--
ALTER TABLE `crimes`
  ADD CONSTRAINT `crimes_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 

Am facut un mic exemplu , desigur pare putin ciudat.

Ideea de baza este acea ca tabelul users este tabelul de baza iar crimes este o derivata pentru ca in tabelul crimes avem o referinta catre tabelul users si anume user_id care face referinta la id-ul din tabelul users.

Doar ca va trebui sa faci un query separat sa incarci datele din tabelul crimes si sa le incarci in variabilele din gm ale playerului.

Si deasemenea trebuie sa faci un query separat la inregistre pentru a introduce in crimes datele playerului (inca nu am descoperit o modalitate mai buna de a face asta)

Ceva de genul am facut eu intr-un gm pentru un sistem de Level:

new query[221];
	mysql_format(g_SQL, query, sizeof query, "INSERT INTO `players` (`username`, `password`, `salt`,`IP`) VALUES ('%e', '%s', '%e','%e')", APlayerData[playerid][PlayerName], APlayerData[playerid][PlayerPassword], APlayerData[playerid][Salt],IP);
	mysql_tquery(g_SQL, query, "OnPlayerRegister", "i", playerid);

	mysql_format(g_SQL, query,sizeof(query), "INSERT INTO `ExpLevel` (`pid`) VALUES ((SELECT `ID` FROM `players` WHERE `username` = '%e'))", APlayerData[playerid][PlayerName]);
	mysql_tquery(g_SQL, query, "","");

Asta e din dialogul de register , astfel incat in momentul in care un player se inregistreaza pe langa introducerea datelor in users se introduc si in crimes . Doar ca va trebui sa faci update la tabelul crimes in momentul in care se produce o crima.

Asta e doar o idee de baza sa zic asa, as fi vrut sa stiu putin mai multe despre forgein key(cheie straina) mai ales ca folositoare cand faci diferite sisteme gen de ownership sau Level cum am facut eu. Tin baza de date mai organizata si e putin mai eficient.

Trebuie sa te joci cu mysql, sa ii inveti smecheriile sa inveti cum functioneaza s.a.m.d.

Link to comment
Share on other sites

  • -1

Arata cum ai structura la acel Object37 , cum e definit etc in baza dedate.Ca la el pare sa fie problema.

Edit1: Nvm , amu am vazut poza a doua....Hmm

Edit2: E o posibiliate sa aibe legatura cu Object37

Edited by Banditul
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.