Comment faire cette requette mysql

  • Auteur de la discussion Auteur de la discussion doom
  • Date de début Date de début
WRInaute discret
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:
 ch1  |  ch2  |  ch3
----------------------
 toto | bibi  | juju
 toto | bibi  | bobo
 toto | bobo  | juju

et je veux une requête pour obtenir ça :
Code:
 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
 
WRInaute discret
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.
 
WRInaute discret
maintenant je cherche a pouvoir comptabiliser combien j'obtient de resultats différents pour un même ch1, exemple :
Code:
 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, ?
 
WRInaute discret
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
 
WRInaute discret
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
 
WRInaute discret
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 )
 
WRInaute impliqué
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 :-)
 
WRInaute discret
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:
$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);
 
WRInaute discret
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)) { )
 
WRInaute discret
Code:
    // 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);
 
WRInaute discret
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);";
 
WRInaute discret
arf toukours la même erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/web/emutorrent/tmp.php on line 15
:(:(:(:(:(
 
Discussions similaires
Haut