12-05-2011, 11:19 AM
J'ai également la même problématique mais je pensais la finaliser plus tard. Du coup j'ai fini de m'y plonger.
Voici le résultat
et pour le tester:
Donc, l'utilisateur possède déjà deux bâtiments, le 1 au niveau 5 et le 4 au niveau 2.
Les prérequis sont:
- pour le 1, pas de prérequis
- pour le 2, il faut le 1 au niveau 1
- pour le 3, il faut le 1 au niveau 10
- pour le 4, il faut le 1 au niveau 5
- pour le 5, il faut le 1 au niveau 1 et le 2 au niveau 1
- pour le 6, pas de prérequis
Donc les bâtiments constructibles sont le 2 et le 6
Voici le résultat
SELECT * FROM `bati` b WHERE id not in(select id_bati from bati_user where id_user=1) and id not in(SELECT p.id_bati
FROM prerequis p
WHERE p.niveau_prerequis > ifnull((
SELECT u.niveau
FROM bati_user u
WHERE u.id_user =1
AND u.id_bati = p.id_prerequis ),0))
et pour le tester:
Code :
--
-- Structure de la table `bati`
--
CREATE TABLE IF NOT EXISTS `bati` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
--
-- Contenu de la table `bati`
--
INSERT INTO `bati` (`id`, `nom`) VALUES
(1, 'bati 1'),
(2, 'bati 2'),
(3, 'bati 3'),
(4, 'bati 4'),
(5, 'bati 5'),
(6, 'bati 6');
-- --------------------------------------------------------
--
-- Structure de la table `bati_user`
--
CREATE TABLE IF NOT EXISTS `bati_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_bati` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`niveau` int(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
--
-- Contenu de la table `bati_user`
--
INSERT INTO `bati_user` (`id`, `id_bati`, `id_user`, `niveau`) VALUES
(1, 1, 1, 5),
(2, 4, 1, 2);
-- --------------------------------------------------------
--
-- Structure de la table `prerequis`
--
CREATE TABLE IF NOT EXISTS `prerequis` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_bati` int(11) NOT NULL,
`id_prerequis` int(11) NOT NULL,
`niveau_prerequis` int(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
--
-- Contenu de la table `prerequis`
--
INSERT INTO `prerequis` (`id`, `id_bati`, `id_prerequis`, `niveau_prerequis`) VALUES
(1, 2, 1, 1),
(2, 3, 1, 10),
(3, 4, 1, 5),
(4, 5, 1, 1),
(5, 5, 2, 1);
Donc, l'utilisateur possède déjà deux bâtiments, le 1 au niveau 5 et le 4 au niveau 2.
Les prérequis sont:
- pour le 1, pas de prérequis
- pour le 2, il faut le 1 au niveau 1
- pour le 3, il faut le 1 au niveau 10
- pour le 4, il faut le 1 au niveau 5
- pour le 5, il faut le 1 au niveau 1 et le 2 au niveau 1
- pour le 6, pas de prérequis
Donc les bâtiments constructibles sont le 2 et le 6