[SQL] petite aide sur un script

Lineya -  
Blunderer Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à toutes et à tous,

J'aimerai requérir votre aide sur un script de recherche que je n'arrive pas à effectuer.
Voici un exemple de table:

10h00 ---- Toto
11h10 ---- Tata
12h05 ---- Titi
12h44 ---- Tutu
13h00 ---- Tsts
14h20 ---- Titi
xxhxx ---- ...

Je souhaite avec ça requêter pour récupérer tout les titi (soit ici ligne 3 et 6) ainsi que la ligne directement inférieur donc pour retrouver :

11h10 ---- Tata
12h05 ---- Titi
13h00 ---- Tsts
14h20 ---- Titi

Merci pour votre aide :)

3 réponses

  1. A.Nonymous
     
    Il y a une clé primaire en plus de ça ? Est-ce qu'il peut y avoir :
    11h10 --- Tutu
    11h10 --- Toto ?

    La réponse à cette question ne changera toutefois que peu de choses à ma proposition :

    SELECT
    timetable.h,
    timetable.nom
    FROM (
    SELECT
    MAX( prev.h ) prev_h,
    timetable.h,
    timetable.nom
    FROM timetable
    LEFT JOIN timetable AS prev ON prev.h < timetable.h
    WHERE
    timetable.nom = 'Titi'
    GROUP BY timetable.nom, timetable.h
    ) res
    INNER JOIN timetable ON timetable.h IN ( res.h, res.prev_h )
    2
  2. Blunderer Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   83
     
    <?php 
    $get_previous = "no"; 
    $req = mysql_query("SELECT * FROM ta_table DESC"); 
    
    while ($data = mysql_fetch_array($req)) 
    { 
        if ($data['nom'] == "Titi") 
        { 
            echo $data['heure']." ------ ".$data['nom']; 
            $get_previous = "yes"; 
        } 
        else if ($get_previous == "yes") 
        { 
            echo "<br/>".$data['heure']." ------ ".$data['nom']; 
            $get_previous = "no"; 
        } 
    } 
    ?>

    Maintenant, je suis.
    0
  3. Lineya
     
    Merci à tout les deux pour votre aide, et voici ce que j'en tire :

    @Blunderer: C'est sympas d'avoir essayé de m'aider. Sauf qui dit SQL ne dit pas forcément php. Je n'y connais absolument rien en php, et les requêtes sql ne correspond en rien. De plus, j'ai jamais compris l'intérêt de coder dans un langage objet ce que SQL pourrais faire de lui même :)

    En tout cas, merci quand même.

    @A.Nonyme: Je pense que tu as saisi ce que je cherchais. Et j'avoue que je n'y comprend jamais rien quand on imbrique des SELECT, j'ai jamais appris à coder de cette manière. De toute façon, de deux choses, ça ne fonctionne pas (mais c'est peut être à cause de moi).

    Pour être un peu plus claire, et voir si quelqu'un va réussir à m'aider :

    Je part en faite d'un fichier .LOG que je souhaite débugger finement. (4 fichiers de 50Ko chacun, je vais pas le faire sans pouvoir trier les données). Du coup, forcement, je n'ai pas d'identifiant, et donc pas de clé primaire. (et vu que c'est du temporaire, j'en est pas besoin)

    Seulement, je viens de m'apercevoir que le fichier n'était pas linéaire sur les données à suivre. j'ai donc certaine ligne avec 12 colonnes, d'autre avec 5 ou 6 éléments. J'ai besoin donc pour que cela marche que ce code ci fonctionne:

    CREATE TABLE timetable(DATET datetime, 
    	titre varchar(100),
    	Intitule varchar(100), 
    	TYPeDonnee varchar(100), 
    	idDef varchar(100), 
    	Libelle varchar(MAX), 
    	mis varchar(100) DEFAULT 'NULL' , 
    	pal varchar(100) DEFAULT 'NULL' , 
    	dep varchar(100) DEFAULT 'NULL' , 
    	dest varchar(100) DEFAULT 'NULL' , 
    	x varchar(100) DEFAULT 'NULL' , 
    	y varchar(100) DEFAULT 'NULL' , 
    	theta varchar(500) DEFAULT 'NULL' , 
    	Bat varchar(100) DEFAULT 'NULL' ,
    	intensite varchar(100) DEFAULT 'NULL' , 
    	tension varchar(100) DEFAULT 'NULL' , 
    	temp varchar(300) DEFAULT 'NULL' );
    GO
    
    bulk insert timetable from 'D:\program\Fichier.log'
    WITH 
    	( 
    		FIELDTERMINATOR = ';',
    		ROWTERMINATOR = '\n'
    		 
    	)
    	
    GO


    Hors, déjà lorsque j'ai dans le .log:

    Numero 1 ---- Toto ---- Ma Grand mère à 17 ans
    Numero 2 ---- Tata
    Numero 3 ---- Titi
    Numero 4 ---- Tutu ---- Et mon frère n'existe plus
    Numero 5 ---- Tsts
    Numero 6 ---- Titi


    je me retrouve avec :

    Numero 1 ---- Toto ---- Ma Grand mère à 17 ans
    Numero 2 ---- Tata ---- Numero 3
    Titi ---- Numero 4


    Ce qui évidemment casse ton code, ainsi que le miens ! Je pensais qu'en mettant ROWTERMINATOR = '\r\n' mais :

    Échec du chargement en masse. La colonne est trop longue dans le fichier de données pour la ligne 1, colonne 17. Vérifiez que le terminateur de champ et le terminateur de ligne sont correctement spécifiés.

    Ensuite, pour ma part du coup en attendant de voir les réponses, j'ai fait comme code :

    CREATE TABLE #TableTemp (h DATETIME)
    -- Indic est là pour visualiser facilement dans les données ou sont mes libelle Intitule = '[INIT]'
    CREATE TABLE #TableTemp2 (h DATETIME, nom varchar(MAX), indic int) 
    
    INSERT INTO #TableTemp 
    	SELECT h FROM tracetest WHERE Intitule like '%init%'
    	
    
    DECLARE @datearecup DATETIME = NULL
    
    DECLARE MonCursor CURSOR
    FOR
    	SELECT h FROM #TableTemp 
    	OPEN MonCursor
    	FETCH MonCursor INTO @datearecup
    		WHILE @@FETCH_STATUS = 0
    		BEGIN	
    			INSERT #TableTemp2 (h, nom, indic) 
    				SELECT DATET, nom, CASE Intitule 
    											when '[INIT]' 
    												then 1 
    												else NULL 
    											end 
    					FROM timetable
    					WHERE h BETWEEN DATEADD(MINUTE, -5, @datearecup) AND @datearecup
    					  AND Intitule <> '[DDEF]'
    					  AND Nom <> 'Null'
    			
    				FETCH MonCursor INTO @datearecup
    		END
    	CLOSE MonCursor
    	DEALLOCATE MonCursor
    	
    	
    	
    SELECT nom, COUNT(nom) FROM #TableTemp2 
    group by nom


    J'ai remis tes libellés pour comprendre la logique. Je pense que ce code-ci est beaucoup plus long à exécuter que le tiens, mais en même temps je le trouve aussi plus claire. Et tant que j'ai pas à le jouer toutes les 5 secondes, m'en fou du rapide :)

    Ai-je été assez claire?
    0
    1. Blunderer Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   83
       
      autant pour moi ;)
      0