peut me suggérer la meilleure façon de sélectionner des enregistrements à partir de MySQL
customer -------- id bed_id status 1 1 vocated 2 1 booked 3 2 vocated bed ----- id name 1 lower 2 middle 3 upper
4 Réponses :
Essayez ceci- Remarque: strong> Ce travail fonctionne pour vos données actuelles. Mais si je pense que je pense que vous devez vérifier le dernier statut d'un lit dans la table des clients. Ce cas vous devez fournir des données avec plus de variété et plus d'explication de votre besoin. P> P>
Merci. Vous recherchez une requête avec rejoindre la table et ce n'est pas avec une sous-requête.
ID dans la table client est incrémentiel? Pour bed_id 1 Il y a 2 entrées avec ID 1 et 2. Est-ce vrai que le plus grand ID 2 détient le dernier statut de bed_id = 1
Rejoignez les tableaux et le groupe par l'ID du lit et placez les conditions dans une clause: Je ne sais pas si vous avez besoin de et code> ou code> ou < code> ou code> dans les conditions p> p>
Cette requête donne 1 et 2 comme "ID de lit"
Maintenant, il donne 2 et 3
Eh bien, après le changement :)
Merci @forpas. Je m'attendais à la même chose dans une seule requête
Il s'agit d'une jointure unique mais elle regroupe ensuite et agrégée pour vérifier les conditions.
Vous pouvez appliquer une logique inverse par Démo KBD> P> P> n'existe pas code>:
Vous pouvez trouver le statut le plus récent en utilisant une sous-requête corrélée et une jointure gauche pour trouver des chambres qui n'ont jamais eu d'activité
select group_concat(s.t1id) availablerooms
from
(
select t1.id t1id,t1.name,t.id,t.bed_id,t.status
from t1
left join t on t1.id = t.bed_id
where t.id = (select max(id) from t where t1.id = t.bed_id) or
t.id is null
) s
where s.status <> 'booked' or s.status is null;
+----------------+
| availablerooms |
+----------------+
| 2,3 |
+----------------+
1 row in set (0.00 sec)
Définir «meilleur» !! Et montrez-nous ce que vous avez essayé
Qu'est-ce que vous avez contre les sous-demandes?