[SQL] petite aide sur un script
Fermé
Lineya
-
24 juil. 2012 à 15:30
Blunderer Messages postés 273 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 6 décembre 2012 - 25 juil. 2012 à 09:50
Blunderer Messages postés 273 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 6 décembre 2012 - 25 juil. 2012 à 09:50
A voir également:
- [SQL] petite aide sur un script
- Petite croix snap - Forum Snapchat
- Blob sql ✓ - Forum Webmastering
- Script vidéo youtube - Guide
- Sql (+) - Forum Programmation
- Sql commence par ✓ - Forum Webmastering
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 )
Blunderer
Messages postés
273
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
6 décembre 2012
84
Modifié par Blunderer le 24/07/2012 à 16:03
Modifié par Blunderer le 24/07/2012 à 16:03
<?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?
Blunderer
Messages postés
273
Date d'inscription
mardi 17 juillet 2012
Statut
Membre
Dernière intervention
6 décembre 2012
84
25 juil. 2012 à 09:50
25 juil. 2012 à 09:50
autant pour moi ;)