2010-11-22 6 views
1

Cette requête est assez explicite:requête exclusive avec SQL IN()

$networks = '6,7,8'; 

$query = "SELECT DISTINCT countryName 
FROM countries AS Country 
INNER JOIN countries_networks AS n ON Country.id = n.country_id 
WHERE n.network_id IN (".$networks.")"; 

Cependant, si je veux choisir le numéro de réseau 8, mais pas 6,7, comment pourrais-je faire cela?

genre de IN('8') but NOT IN('6,7')

L'utilisation de IN() est une exigence non.

Je suis après les pays qui ont SEULEMENT un réseau de 8. La raison en est que j'ai 2 niveaux de téléphone portable. Dites, le 'scumbag-phone' qui fonctionne dans les réseaux 6 & 7, et le 'Uber-phone' qui fonctionne dans les réseaux 6,7 & 8. Je veux obtenir les pays où il est essentiel que vous ayez un Uber- téléphone (8 seulement). Pour le moment, ces requêtes auront 8, mais pas exclusivement. Ils ne tiennent pas compte du fait qu'il peut y avoir 6,7 là-bas, jugeant l'Uber-téléphone non-essentiel.

+0

Veuillez afficher la structure complète des deux tableaux et quelques exemples de données. – shamittomar

Répondre

1
$query = "SELECT DISTINCT countryName 
FROM countries AS Country 
INNER JOIN countries_networks AS n ON Country.id = n.country_id 
WHERE n.network_id in (8) AND not n.network_id in (6, 7) 
+0

Salut Preet, voir mes modifications ci-dessus, j'ai échoué à expliquer clairement ce dont j'avais besoin. –

4

Si vous IN('8') alors automatiquement 6,7 sera pas sélectionné.

Vous y réfléchissez trop. Mais encore, si vous voulez écrire, faites ceci:

n.network_id IN('8') AND n.network_id NOT IN(6,7) 
+2

oui, vous avez raison, je suis. Je crois que j'ai besoin de m'asseoir dans une pièce sombre. Merci. –

+0

En fait c'est ce que je fais déjà, mais je veux sélectionner un nom de pays s'il n'y a qu'un ID de réseau de 8, et rien d'autre, donc s'il y a un 6,7 dans la base de données, ignorer complètement ce pays. La requête ci-dessus ne considère pas cela, il ignore juste 6,7. –

1

Il n'y a pas de questions stupides, seulement des réponses stupides ...

Voici ma tentative:

« $ query = "SELECT DISTINCT countryName FROM pays AS Pays INNER JOIN pays_networks AS n ON Pays.id = n.country_id OERE n.network_id IN (" 8 ") ET n.network_id NON IN (" 6,7 ") « ,`

2

Vous pourriez même pas besoin de cette réponse plus mais je couru à travers un problème très similaire et je l'ai résolu en faisant quelque chose comme ceci:

SELECT DISTINCT countryName 
FROM countries AS Country 
INNER JOIN countries_networks AS n ON Country.id = n.country_id 
WHERE n.network_id IN ('8') and countryName not in (
    SELECT DISTINCT countryName 
    FROM countries AS Country 
    INNER JOIN countries_networks AS n ON Country.id = n.country_id 
    WHERE n.network_id IN ('6', '7') 
); 

Avec que vous sélectionnez exclusivement que les dans lequel network_id est '8' et nécessairement pas '6' et '7'.

+1

Nous avons un fossoyeur ici. –

+1

Merci pour la contribution :) –