[SQL] petite aide sur un script
Lineya
-
Blunderer Messages postés 273 Date d'inscription Statut Membre Dernière intervention -
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 :)
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:
- [SQL] petite aide sur un script
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Petite amie virtuelle en français gratuit - Accueil - Intelligence artificielle
- Logiciel sql - Télécharger - Bases de données
3 réponses
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 )
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 )
<?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.
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:
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 :
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?
@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?