web-dev-qa-db-fra.com

Est-ce que MySQL "SELECT LIMIT 1" avec plusieurs enregistrements sélectionne le premier enregistrement à partir du haut?

J'ai cherché et cherché et je ne trouve pas de réponse à cette question, je la pose probablement dans le mauvais sens.

Je recherche une base de données d'employés.

J'ai besoin d'obtenir des détails en fonction d'un identifiant de poste, mais il pourrait y avoir plusieurs enregistrements pour cet identifiant de poste car cette organisation a des employés permanents et des employés temporaires qui agissent contre le même poste.

Ainsi, afin d'obtenir l'occupant ACTUEL de l'identifiant de position, j'ai besoin de ma requête pour sélectionner le PREMIER enregistrement qui correspond à la chaîne de position, du haut vers le bas.

cela sélectionnera-t-il le premier enregistrement correspondant à partir du haut?

SELECT * WHERE `position_id`="00000000" LIMIT 1;

Merci d'avance.

12
hammus

Vous avez besoin d'un ORDER BY clause pour définir l'ordre entre les enregistrements individuels de votre table. Si vous n'utilisez pas ORDER BY vous ne pouvez supposer aucun ordre fixe entre les enregistrements et vous pouvez obtenir un nouvel ordre chaque fois que vous exécutez la requête.

11
apartridge

Du manuel:

Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début de l'ensemble de résultats

Donc avec LIMIT 1 vous obtenez la première ligne du jeu de résultats. Le jeu de résultats dépend du moteur utilisé et des index dont vous disposez. Si vous souhaitez ajouter la première ligne, vous devez créer une autre colonne pour la définir.

3
flogvit

Il en obtient juste un au hasard*. Il n'y a aucun moyen de dire lequel, sauf si vous ajoutez un ORDER BY clause.

* Pas vraiment au hasard, bien sûr. Cela dépend de la façon dont les enregistrements sont stockés et les requêtes répétées retourneront probablement le même résultat à chaque fois, au moins tant que vous ne modifiez pas la table ou son contenu. En fait, vous ne pouvez pas être sûr.

2
GolezTrol