Menu

Comparer les valeurs de deux colonnes d'une table [Résolu/Fermé]

merchou - 13 mars 2014 à 10:02 - Dernière réponse :  merchou
- 13 mars 2014 à 15:56
Bonjour à tous !
Je suis nouveau dans les bases de données.
J'une table nommée coordab ayant 3 colonnes : IMSI, MDN, NUMF . Mon souci de savoir la requête qui permet de:
- Prendre chaque ligne de NUMF et comparer ses 7 derniers chiffres aux 7 derniers chiffres de chaque ligne de IMSI
- Là où ces 7 derniers chiffres sont égaux, il recupère cette ligne IMSI, et le MDN de cette ligne ainsi que la ligne NUMF testé.

Exemple:

------IMSI----------------------MDN----------------NUMF

624030743830010-------2373300002E-------2333000034
624030743830015-------2373300002S------2333830023
624030743830019-------237330000D1-------2333000015
624030743830023---2373300002N-----2333000084
624030743830000-------237330000DO-------2333000009

Résultats:

NUMF : 2333830023

IMSI : 624030743830023

MDN : 2373300002N


S'il vous plait aidez moi.

Merci d'avance.
Afficher la suite 

9 réponses

Reivax962 3206 Messages postés jeudi 16 juin 2005Date d'inscription 17 avril 2018 Dernière intervention - 13 mars 2014 à 11:17
0
Utile
Bonjour,

Un truc de ce genre peut-il te convenir ?
select t1.IMSI, t1.MDN, t2.NUMF
from nomtable t1
inner join (
    select distinct NUMF from nomtable
) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)


Xavier
0
Utile
1
Merci beaucoup pour votre AIDE.

J'excuse pour le silence, j'ai eu un problème de connexion depuis environ 1h.

Le code que vous m'avez envoyé fonctionne très bien.

Mais j'ai fait une erreur au niveau de ma question:

En fait NUMF se trouve dans une autre table de nom numero.

Comment je peux adapter votre requête à cette situation ?

S'il vous plait aidez moi encore.

Merci d'avance !
Reivax962 3206 Messages postés jeudi 16 juin 2005Date d'inscription 17 avril 2018 Dernière intervention - 13 mars 2014 à 13:58
Il suffit, a priori, de mettre le bon nom de table dans cette partie de la requête :
select distinct NUMF from nomtable
0
Utile
1
Voici mon code :

    <?php	
set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);

	//Connexion à la BD
mysql_connect('localhost','root','');
mysql_select_db('gestnum');

$sql = 'select t1.IMSI, t1.MDN, t2.NUMF
from coordab t1
inner join (
    select distinct NUMF from numero
) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$i=0; 
// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) 
    {
	$i++; 
	// on affiche les résultats
	echo 'IMSI : '.$data['IMSI'].'<br />';
	echo 'MDN : '.$data['MDN'].'<br />';
	echo 'NUMF : '.$data['NUMF'].'<br /><br />';
    }
mysql_free_result ($req);
mysql_close ();

?>



Quand j'exécute ce code, j'obtiens l'erreur suivante:

Erreur SQL !
select t1.IMSI, t1.MDN, t2.NUMF from coordab t1 inner join ( select distinct NUMF from numero ) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)
Unknown column 'NUMF' in 'field list'


S'il vous plait aidez moi encore.
Reivax962 3206 Messages postés jeudi 16 juin 2005Date d'inscription 17 avril 2018 Dernière intervention - 13 mars 2014 à 14:59
Essaie ceci :
select distinct NUMF as NUMF from numero
0
Utile
1
Merci encore.

Je viens d'essayer, mais j'ai la même erreur:

Erreur SQL !
select t1.IMSI, t1.MDN, t2.NUMF from coordab t1 inner join ( select distinct NUMF as NUMF from numero ) t2 ON SUBSTRING(t2.NUMF, -7) = SUBSTRING(t1.IMSI, -7)
Unknown column 'NUMF' in 'field list'
Reivax962 3206 Messages postés jeudi 16 juin 2005Date d'inscription 17 avril 2018 Dernière intervention - 13 mars 2014 à 15:16
Tu es sûr du nom de la colonne NUMF ?
0
Utile
Voici la structure de mes deux tables:

 
-- phpMyAdmin SQL Dump
-- version 4.0.4
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le: Jeu 13 Mars 2014 à 14:15
-- Version du serveur: 5.6.12-log
-- Version de PHP: 5.4.12
 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: 'gestnum'
--
CREATE DATABASE IF NOT EXISTS 'gestnum' DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE 'gestnum';
 
-- --------------------------------------------------------
 
--
-- Structure de la table 'coordab'
--
 
CREATE TABLE IF NOT EXISTS 'coordab' (
  'ida' int(10) NOT NULL AUTO_INCREMENT,
  'IMSI' char(15) NOT NULL,
  'MEID' char(14) NOT NULL,
  'ESN1' char(8) NOT NULL,
  'PUK1' char(8) NOT NULL,
  'AKY' char(16) NOT NULL,
  'MDN' char(13) NOT NULL,
  'NUMF' char(13) NOT NULL,
  PRIMARY KEY ('ida'),
  UNIQUE KEY 'coordab_IMSI' ('IMSI'),
  KEY 'ida' ('ida')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=364552 ;
 
-- --------
 
--
-- Structure de la table 'numero'
--
 
CREATE TABLE IF NOT EXISTS 'numero' (
  'idnum' int(10) NOT NULL AUTO_INCREMENT,
  'num' char(13) NOT NULL,
  PRIMARY KEY ('idnum')
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
 
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
0
Utile
S'il vous plait excusez moi, car l'erreur vient de moi même.
C'est plutôt num au lieu de NUMF, j'ai fait une confusion.

Tout marche bien maintenant.

Merci beaucoup Reivax962.

Vous m'avez beaucoup aidé.

Salut !