Salut tout le monde ^^
Soit 2 tables :
- carte_evenement : qui regroupe tout ce qui se passe sur une carte
- carte_cases : qui regroupe toutes les cases de la carte.
Carte_cases (qu'on appellera cc) se définit ainsi :
4 colonnes pour les coordonnées : Carte, Altitude, X et Y
2 colonnes pour les informations de la carte : marchable, territoire
les coordonnées servent de clés primaires
Carte_evenement (qu'on appellera ce) se définit ainsi
1 ID : ID
4 coordonnées : Carte, Altitude, X et Y
2 informations du type : Type et IdType
L'ID sert de clé primaire et j'ai un index regroupant Carte,Altitude,X et Y
Carte,Altitude,X et Y servent bien sûr de lien entre les 2 tables^^
Le lien entre ses tables et de type 1-n. Chaque évènement n'a qu'une case; chaque case peut avoir de 0 à n évènements.
cc.Marchable a 2 valeurs : 0 (non-marchable), 1 (marchable)
cc.Territoire a plein de valeurs.
ce.Type a 6 valeurs : 1 à 6.
J'aimerais arriver (via MySQL idéalement) à récupérer les coordonnées d'une case (Carte,Altitude,X,Y) qui répond aux données suivantes :
- cc.Marchable = 1
- cc.Territoire = valeur fixe
- ce.Type peut avoir la valeur 1,4,5
- ce.Type ne peut JAMAIS avoir la valeur 2,3,6
- aléatoire parmi celles restantes, en équiprobable (je ne peux donc pas garder 2 cases ayant les mêmes coordonnées avant l'aléatoire)
En exemple simple :
Une case 1,0,25,30 avec un seul évènement type 1 sera dans la liste
Une case 1,0,12,30 avec un évènement type 1 et un type 5 sera une fois dans la liste
Une case 1,0,23,50 avec un évènement type 2 ne sera pas dans la liste
Une case 1,0,17,20 avec un évènement type 2 et un évènement type 3 ne sera pas dans la liste
Une case 1,0,22,43 avec un évènement type 4 ET un évènement type 2 ne sera pas dans la liste
J'arrive pour l'instant à ce code, mais il ne marche pas correctement:
Modifié par Lothindil (18 Sep 2013 - 13:07)
Soit 2 tables :
- carte_evenement : qui regroupe tout ce qui se passe sur une carte
- carte_cases : qui regroupe toutes les cases de la carte.
Carte_cases (qu'on appellera cc) se définit ainsi :
4 colonnes pour les coordonnées : Carte, Altitude, X et Y
2 colonnes pour les informations de la carte : marchable, territoire
les coordonnées servent de clés primaires
Carte_evenement (qu'on appellera ce) se définit ainsi
1 ID : ID
4 coordonnées : Carte, Altitude, X et Y
2 informations du type : Type et IdType
L'ID sert de clé primaire et j'ai un index regroupant Carte,Altitude,X et Y
Carte,Altitude,X et Y servent bien sûr de lien entre les 2 tables^^
Le lien entre ses tables et de type 1-n. Chaque évènement n'a qu'une case; chaque case peut avoir de 0 à n évènements.
cc.Marchable a 2 valeurs : 0 (non-marchable), 1 (marchable)
cc.Territoire a plein de valeurs.
ce.Type a 6 valeurs : 1 à 6.
J'aimerais arriver (via MySQL idéalement) à récupérer les coordonnées d'une case (Carte,Altitude,X,Y) qui répond aux données suivantes :
- cc.Marchable = 1
- cc.Territoire = valeur fixe
- ce.Type peut avoir la valeur 1,4,5
- ce.Type ne peut JAMAIS avoir la valeur 2,3,6
- aléatoire parmi celles restantes, en équiprobable (je ne peux donc pas garder 2 cases ayant les mêmes coordonnées avant l'aléatoire)
En exemple simple :
Une case 1,0,25,30 avec un seul évènement type 1 sera dans la liste
Une case 1,0,12,30 avec un évènement type 1 et un type 5 sera une fois dans la liste
Une case 1,0,23,50 avec un évènement type 2 ne sera pas dans la liste
Une case 1,0,17,20 avec un évènement type 2 et un évènement type 3 ne sera pas dans la liste
Une case 1,0,22,43 avec un évènement type 4 ET un évènement type 2 ne sera pas dans la liste
J'arrive pour l'instant à ce code, mais il ne marche pas correctement:
$rq="select distinct carte_cases.* from carte_cases
Left Join carte_evenement ON carte_cases.Carte = carte_evenement.Carte AND carte_cases.X = carte_evenement.X AND carte_cases.Y = carte_evenement.Y AND carte_cases.Altitude = carte_evenement.Altitude
Where carte_cases.Territoire = '".$territoire."' AND
carte_cases.Marchable = '1' AND
((carte_evenement.`Type` = 1 OR carte_evenement.`Type` Is Null OR carte_evenement.`Type` = 4 OR carte_evenement.`Type` = 5 )) order by rand() limit 1"
Modifié par Lothindil (18 Sep 2013 - 13:07)