Dans une table xyz, j'ai une rangée appelée composants et une rangée labref qui porte le numéro labref, comme indiqué ici.
Table xyz
labref component
NDQA201303001 a
NDQA201303001 a
NDQA201303001 a
NDQA201303001 a
NDQA201303001 b
NDQA201303001 b
NDQA201303001 b
NDQA201303001 b
NDQA201303001 c
NDQA201303001 c
NDQA201303001 c
NDQA201303001 c
Je souhaite regrouper les composants, puis compter les lignes renvoyées, ce qui équivaut à 3. J'ai écrit la requête SQL ci-dessous, mais cela n'aide pas mon objectif. Il renvoie 4 pour chaque composant.
SELECT DISTINCT component, COUNT( component )
FROM `xyz`
WHERE labref = 'NDQA201303001'
GROUP BY component
La requête retourne
Table xyz
labref component COUNT(component)
NDQA201303001 a 4
NDQA201303001 b 4
NDQA201303001 c 4
Ce que je veux réaliser maintenant est que, à partir du résultat ci-dessus, les lignes sont comptées et 3 sont renvoyées sous forme de nombre de lignes. Toute solution de contournement est appréciée.
Tu as besoin de faire -
SELECT COUNT(*)
FROM(
SELECT DISTINCT component
FROM `multiple_sample_assay_abc`
WHERE labref = 'NDQA201303001'
) AS DerivedTableAlias
Vous pouvez également éviter les sous-requêtes comme suggéré par @ hims056 ici
Essayez cette requête simple sans sous-requête:
SELECT COUNT(DISTINCT component) AS TotalRows
FROM xyz
WHERE labref = 'NDQA201303001';
Pourquoi ne pas utiliser num_rows
.
Si vous le faites à l'aide de cette méthode, vous ne devez en aucun cas modifier la requête.
if ($result = $mysqli->query("SELECT DISTINCT component, COUNT( component )
FROM `xyz`
WHERE labref = 'NDQA201303001'
GROUP BY component")){
/* determine number of rows result set */
$row_cnt = $result->num_rows;
printf("Result set has %d rows.\n", $row_cnt);
/* close result set */
$result->close();
}