Bonjour,

Je me tourne vers vous car je ne trouve aucune solution à mon problème.

Je suis en train de réaliser un site web pour une association leur permettant d'organiser des départs en vacances. Un onglet "Agenda" contenant un tableau est à leur disposition afin d'ajouter des plages de disponibilités. Mon but était de récupérer dans ma base de données PHPMyAdmin la partie la plus commune à toutes ces plages de disponibilités, ceci afin de leur faciliter la tâche pour retrouver quelle est la période dans laquelle un maximum d'adhérent est disponible.

Du côté base de données j'ai une table intitulé "Availability" (disponibilités) qui contient entre autres les champs dateFrom et dateTo.

Voici la page "Agenda" pour mieux visualiser:

Nom : Capture d’écran 2015-04-16 à 12.03.09.png
Affichages : 1570
Taille : 48,4 Ko

Mon controller:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
namespace ASSO\ScheduleBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 
class DefaultController extends Controller
{
    public function indexAction()
    {
        $repository = $this
            ->getDoctrine()
            ->getManager()
            ->getRepository('ASSOAvailabilityBundle:Availability');
 
        $listAvailability = $repository->findAll();
 
        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery(
            'DROP VIEW v_recherche_plages_communes;
            DROP VIEW v_plages_communes;
            CREATE VIEW v_recherche_plages_communes AS
            SELECT a1.id AS id_1, a1.dateFrom AS debut_1, a1.dateTo AS fin_1,
                   a2.id AS id_2, a2.dateFrom AS debut_2, a2.dateTo AS fin_2,
                CASE
		            WHEN a1.dateFrom >= a2.DateFrom AND a1.dateFrom < a2.dateTo THEN a1.dateFrom
		            WHEN a1.dateTo <= a2.dateTo THEN a2.dateFrom
                    ELSE NULL
	            END AS date_debut_commune,
	            CASE
		            WHEN a1.dateTo <= a2.dateTo AND a1.dateTo > a2.dateFrom THEN a1.dateTo
		            WHEN a1.dateFrom <= a2.dateTo THEN a2.dateTo
		            ELSE NULL
	            END AS date_fin_commune
            FROM Availability a1
            INNER JOIN Availability a2 ON a1.id <> a2.id;
            CREATE VIEW v_plages_communes AS
            SELECT tmp.id_1,
	            MAX(tmp.date_debut_commune) AS debut_periode_commune,
	            MIN(tmp.date_fin_commune) AS fin_periode_commune,
	            COUNT(*) AS nb_plages_communes
            FROM v_recherche_plages_communes tmp
            WHERE tmp.date_debut_commune IS NOT NULL
	            AND tmp.date_fin_commune IS NOT NULL
            GROUP BY tmp.id_1;
            SELECT debut_periode_commune, fin_periode_commune
            FROM v_plages_communes
            WHERE nb_plages_communes =
            (
	            SELECT MAX(nb_plages_communes) AS meilleur_score
	            FROM v_plages_communes
            )'
        );
 
        $overlappedPeriod = $query->getResult();
 
        return $this->render('ASSOScheduleBundle:Default:index.html.twig', array(
            'availabilities'  => $listAvailability,
            'overlappedPeriods' => $overlappedPeriod
        ));
    }
}
Ma requête comporte donc deux vues, sachant que dans PHPMyAdmin les vues et requêtes qui suivent fonctionnent très bien, j'ai essayé de les créer directement dans mon controller (pour un premier test) mais j'ai une erreur qui est la suivante:

[Syntax Error] line 0, col 0: Error: Expected SELECT, UPDATE or DELETE, got 'DROP'
Si quelqu'un à une solution pour contourner le problème ou une piste vers laquelle m'aiguiller ?

En vous remerciant par avance!