[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 :)
A voir également:

3 réponses

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
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
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
Blunderer Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   83
 
autant pour moi ;)
0