Article Taggé mysql

Place dans un classement et rang parmi des enregistrements MySQL

Si vous voulez réaliser un Top 1000 pour votre jeu en ligne ou plus généralement connaitre quelle est la place d’un de vos tuple dans un ensemble trié d’enregistrements, voici une petite astuce qui vous permettra d’obtenir le résultat avec un moyen 100 % SQL ( pas besoin de variable compteur coté serveur).

Imaginez une table players contenant les colonnes “pseudo, score et time_played”. Notre objectif est de connaitre la position d’un joueur dans le classement total connaissant le champ “pseudo”. L’obtention de son rang va se faire en 3 temps :

1. On va commencer par initialiser une variable MySQL avec la commande SET:
SET @counter = 0;

2. L’étape suivante consiste à effectuer une première requête qui va compter et créer une colonne indiquant le rang de chacun des enregistrements au sein de la table.
SELECT pseudo,score,time_played,@counter:=@counter+1 AS rang FROM players ORDER BY score ASC;

3. Enfin, nous allons isoler l’enregistrement qui nous intéresse, à savoir, celui dont la valeur pseudo est celle que nous cherchons.

Il s’agit d’une simple requête du type

SELECT place,pseudo FROM (*****) AS subrequest WHERE pseudo = ‘John Doe’;

Si vous avez suivi, vous aurez d’ores et déja compris qu’il va falloir remplacer les ***** par notre requête construite à l’étape 2 (il s’agit de ce qu’on appelle une sous- requete). Le résultat obtenu devrait être une table contenant le rang et le pseudonyme de notre joueur ‘John Doe’.

N’hésitez pas à envoyer un commentaire si vous avez besoin d’aide !

Références :
Documentation MySQL

Add comment juin 4, 2009

Sécuriser MySQL : création d’un utilisateur dédié à une base de donnée

Dans l’ensemble de cet article on supposera l’utilisateur MySQL root existant avec le mot de passe: rootPass

Etape 1 : Créer l’utilisateur

Connectez vous en root sur la table appelée “mysql”, et tapez la commandes suivantes.

INSERT INTO user(host,user,password) VALUES (‘localhost’,'nom_user’,PASSWORD(‘pass_user’));

Etape 2 : Créer la base de donnée

En root, il suffit d’entrer les commandes CREATE DATABASE nom_database;.
Pour générer les tables, que vous avez déjà probablement crée lors de la phase de développement, je vous conseille d’exporter la structure depuis le SGBD de dev, puis de l’insérer dans le SGBD de production en utilisant:
mysql -u root -prootPass nom_database <votrefichier.sql

Etape 3 : Attribuer les droits : insertion, suppression, et lecture sur l’ensemble de la base

L’attribution des droits s’effectue avec l’usage de la commane GRANT, comme suit:

GRANT SELECT, INSERT, UPDATE ON nom_database.* TO nom_user@’localhost’ ;

Validez l’attribution de ces droits par:
flush privileges;

Références

http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html

Add comment février 23, 2009

Récupérer l’id (autoincrement) après un insert

Fiche recette du 12 février 2009:

Comment récupérér la valeur d’un champ déclaré “auto_increment” lors d’un INSERT INTO exécuté depuis Java ?

L’API JDBC fournit une méthode extrèmement pratique appelée getGeneratedKeys():

PreparedStatement stat = connectionSql.prepareStatement("INSERT INTO maTable SET " +
"login = ?," +
"email = ?");
int i=1;
stat.setString(i++, leLogin);
stat.setString(i++, leMail);
int nb_lignes = stat.executeUpdate();
ResultSet rs = stat.getGeneratedKeys();
int idAuto_increment = 0;
if( rs.next() ) {
idAuto_increment = rs.getInt(1);
}

Un enchainement de méthodes très certainement utile à connaitre… et que je recherche à chaque fois que je travaille avec MySql et son connecteur Java…

Add comment février 12, 2009

Crappy loop inside mysql request… Play with mysql procedure.

If you miss something during the conception of your mysql database, or wish to add some new tables for additional features in your web application, it could be a mess to build the new version on your database without droping all data of the existing tables.

I personnaly needed to keep thousand of registered users (in a table) and nevertheless i had to provide some messaging feature in another table.

I decided to:

1. Create the new table in my existing database:

CREATE TABLE `newone` (
`id` INT NOT NULL ,
`field1` TINYINT NOT NULL ,
`field2` BLOB NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;

2. Set my default values for each field:

ALTER TABLE `newone` CHANGE `field1` `field1` TINYINT( 4 ) NOT NULL DEFAULT ‘999999′

3. Insert as many lines as registered user, so that every registered user have their own line in the “newone” table:
i used the LOOP mysql statement to achieve this:

delimiter !!

CREATE PROCEDURE massiveInsert(IN maxInserts INT)
BEGIN
DECLARE i INT;
SET i=1;
myloop: LOOP
SET i=i+1;
IF i=maxInserts THEN
LEAVE myloop;
END IF;
insert into newone values();
END LOOP myloop;
END!!

Doesn’t it looks like 80’s GW*-Basic, ehhh ?

To run this procedure, just type:
call massiveInsert();

What do you need to remind concerning MySQL procedures:

- Define you OWN delimiter, unsing the delimiter. Otherwise, you will get the Error Code : 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near blahblahblah

- Use the keyword IN to input parameters, and next the variable name + parameter type.

- Use the call() instruction to execute your procedure.

References:

mysql manual

Add comment octobre 2, 2008

Installer le connecteur mysql java sur un serveur Tomcat

Nous allons installer le support de mysql au serveur Tomcat.

Il est important de ne pas dupliquer l’installation du connecteur (ne pas inclure dans le code source s’il n’est pas inclus.

il suffit de copier le fichier jar dans le dossier catalina_home/common/libs

Ainsi on fait un:

wget http://mir2.ovh.net/ftp.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.6.tar.gz

puis tar -zxvf ./mysql-connector-java-5.1.6.tar.gz

et enfin mv ./mysql-connector-java-5.1.6.tar.gz /catalinahome/common/libs/

et ca devrait être bon :-) N’oubliez pas de remplacer catalina_home par votre propre répertoire d’installation de Tomcat bien entendu…

Add comment septembre 23, 2008


Catégories

Articles récents

Mots-clefs

2.0 java blogosphère admin apache configuration CSS debian desactiver desinstaller démons ECMAScript fluxbb forum gpg GWT httpd.conf IDE IM inetd install installer php+mysql inutiles iphone iphoneOS jabber java javamail Javascript kopete mysql ménage netbeans new Function php phpbb privacité pstree punbb remove daemon serveur dédié services services linux sujet tomcat utf8 xinetd

Méta

Articles les plus consultés