Comment faire cette requette mysql

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Comment faire cette requette mysql

Message le Jeu Juil 13, 2006 21:37

salut,
voilà, je possède une table mysql avec 3 champs, que l'on va noter idi ch1 , ch2 et ch3
Et j'ai envie en fet de faire une requête qui supprime une insertion quand il y a 2 insertions dont les champs ch1 et ch2 sont identiques

exemple :
On a ça :
Code: Tout sélectionner
ch1  |  ch2  |  ch3
----------------------
toto | bibi  | juju
toto | bibi  | bobo
toto | bobo  | juju


et je veux une requête pour obtenir ça :
Code: Tout sélectionner
ch1  |  ch2  |  ch3
----------------------
toto | bibi  | bobo
toto | bobo  | juju

Libre choix de supprimer une des 2 au hasard des insertions identiques.

Voilà, je vous remercie d'avance de votre aide!

DooM


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Jeu Juil 13, 2006 22:38

Je ferais un truc du style :

SELECT ch1, ch2, max(ch3) as ch3
FROM LATABLE
GROUP BY ch1, ch2

Max ou min si tu veux le premier ou le dernier dans l'ordre alphabetique.

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Jeu Juil 13, 2006 22:49

génial c'est nickel ça marche super, merci beaucoup!

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Jeu Juil 13, 2006 23:07

maintenant je cherche a pouvoir comptabiliser combien j'obtient de resultats différents pour un même ch1, exemple :
Code: Tout sélectionner
ch1  |  ch2  |  ch3
----------------------
toto | bibi  | bobo
toto | bobo  | juju

ce qui nous donne 2 résultats différents pour un meme ch1.
Après, il me faut soumettre dans une autre table ce chiffre 2 pour le ch1='toto'

vous avez une idée, ?


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Jeu Juil 13, 2006 23:23

SELECT count(ch1) as NB, ch1
FROM LATABLE
GROUP BY ch1

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Jeu Juil 13, 2006 23:27

a oui super bien joué;
par contre, est-il possible de grouper ces 2 requettes, cad :

SELECT ch1, ch2, max(ch3) as ch3
FROM LATABLE
GROUP BY ch1, ch2

et

SELECT count(ch1) as NB, ch1
FROM LATABLE
GROUP BY ch1


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Jeu Juil 13, 2006 23:29

Tu peux tenter ça, mais en mysql je suis pas certain de la syntaxe :

SELECT count(ch1) as NB, ch1
FROM (
SELECT ch1, ch2, max(ch3) as ch3
FROM LATABLE
GROUP BY ch1, ch2 ) temptable
GROUP BY ch1

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Jeu Juil 13, 2006 23:36

effectivement, petit problème de synthaxe, en effet il affiche : ... for the right syntax to use near 'SELECT id, ip, max(date) as date FROM rech_ip GROUP BY id, ip )


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Ven Juil 14, 2006 7:19

Chez moi ça marche, tu peux mettre exactement ta derniere requete avec les 2 imbriquées ?

Sir Dipp
WRInaute accro
WRInaute accro
 
Messages: 1025
Inscription: Lun Juil 21, 2003 17:53

Message le Ven Juil 14, 2006 8:09

Les requêtes imbriqué sont uniquement disponible depuis MySQL 4.1 et beaucoup de mon en sont encore à la version 3.

C'est peut-être pour ça :-)


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Ven Juil 14, 2006 9:00

Bien vu Sir Dipp !

Alors si tu peux pas faire de requête imbriqué il va falloir faire des tables temporaires :

CREATE TEMPORARY TABLE table_temp (ch1 varchar(20), ch2 varchar(20), ch3 varchar(20));

INSERT INTO table_temp SELECT ch1, ch2, max(ch3) as ch3 FROM test GROUP BY ch1, ch2;

SELECT count(ch1) as NB, ch1 FROM table_temp GROUP BY ch1;

DROP TABLE table_temp;

Avec le php :
Code: Tout sélectionner
$strSQL = "CREATE TEMPORARY TABLE table_temp (ch1 varchar(20), ch2 varchar(20), ch3 varchar(20));";
mysql_query($strSQL);
$strSQL = "INSERT INTO table_temp SELECT ch1, ch2, max(ch3) as ch3 FROM test GROUP BY ch1, ch2;";
mysql_query($strSQL);

$strSQL = "SELECT count(ch1) as NB, ch1 FROM table_temp GROUP BY ch1;";
$result = mysql_query($strSQL);
while ($row = mysql_fetch_array ($result)) {
   echo $row["NB"]." | ".$row["ch1"]."<br />";
}

$strSQL = "DROP TABLE table_temp;";
mysql_query($strSQL);

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Ven Juil 14, 2006 11:02

merci pr votre aide;

il me dit : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/web/site/tmp.php on line 15

(ligne 15 : while ($row = mysql_fetch_array ($result)) { )
Dernière édition par doom le Mer Nov 01, 2006 12:15, édité 1 fois.


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Ven Juil 14, 2006 11:30

Ca marche chez moi pourtant, j'ai testé avant de poster.


Tu peux mettre tout ton bout de code ?

doom
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 155
Inscription: Dim Déc 21, 2003 19:37

Message le Ven Juil 14, 2006 11:35

Code: Tout sélectionner
    // on se connecte a la base
    $db = mysql_connect('localhost', '****', '****')  or die('Erreur de connexion '.mysql_error());
    // sélection de la base 
    mysql_select_db('****',$db)  or die('Erreur de selection '.mysql_error());


$strSQL = "CREATE TEMPORARY TABLE table_temp (id varchar(20), ip varchar(20), date varchar(20));";
mysql_query($strSQL);
$strSQL = "INSERT INTO table_temp SELECT id, ip, max(date) as date FROM rech_ip GROUP BY id, ip;";
mysql_query($strSQL);

$strSQL = "SELECT count(id) as NB, id FROM table_temp GROUP BY id;";
$result = mysql_query($strSQL);
while ($row = mysql_fetch_array ($result)) {
   echo $row["NB"]." | ".$row["id"]."<br />";
}

$strSQL = "DROP TABLE table_temp;";
mysql_query($strSQL);


reglysse
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 148
Inscription: Mer Avr 19, 2006 16:51

Message le Ven Juil 14, 2006 11:43

Tu as un champ date que tu veux inserer dans un varchar, c'est peut-etre ça.

Remplace cette ligne :
$strSQL = "CREATE TEMPORARY TABLE table_temp (id varchar(20), ip varchar(20), date varchar(20));";

Par :
$strSQL = "CREATE TEMPORARY TABLE table_temp (id varchar(20), ip varchar(20), date date);";

Comment faire cette requette mysql

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités