Comment SÉLECTIONNER les 10 dernières lignes d'une table SQL qui n'a pas de champ ID?
J'ai une table MySQL avec 25000 lignes.
C'est un fichier CSV importé, donc, je tiens à regarder les dix dernières lignes pour s'assurer qu'il importé le tout.
Cependant, puisqu'il n'y a pas de colonne ID, je ne peux pas dire:
SELECT * FROM big_table ORDER BY id DESC
Quelle instruction SQL de me montrer les 10 dernières lignes de ce tableau?
La structure de la table est tout simplement ceci:
columns are: A, B, C, D, ..., AA, AB, AC, ... (like Excel)
all fields are of type TEXT
Définir le "dernier". Dans la plupart des implémentations de SQL n'est pas inhérent à l'ordre...
montrer la structure de ta table, s'il vous plaît.
Ajouter le rownumber à partir du fichier comme une colonne.
Peut-être hors sujet, mais pourquoi ne pas utiliser simplement ajouter une colonne de type AUTO_INCREMENT à votre schéma? (Vous aurez toujours être en mesure d'importer le fichier CSV.)
montrer la structure de ta table, s'il vous plaît.
Ajouter le rownumber à partir du fichier comme une colonne.
Peut-être hors sujet, mais pourquoi ne pas utiliser simplement ajouter une colonne de type AUTO_INCREMENT à votre schéma? (Vous aurez toujours être en mesure d'importer le fichier CSV.)
OriginalL'auteur Edward Tanguay | 2011-01-17
Vous devez vous connecter pour publier un commentaire.
SQL tables n'ont aucune implicite de la commande, la commande est à venir à partir des données.
Peut-être vous devriez ajouter un champ à une table (par exemple un int compteur) et ré-importer les données.
Cependant qui ne fera que donner l'ordre de l'importation, et non les données. Si vos données n'a pas de commande, vous devez trouver comment l'ajouter.
EDIT: vous dire
Quel est le problème avec l'aide de nombre de ligne?
En effet, vous allez avoir à définir le "dernier" dans vos données avant de vous poser cette question. Un champ de type auto_increment serait probablement la meilleure solution, ce qu'il faudrait retrouver dans la base de données dans le même ordre que dans le fichier CSV. Bien que je ne pense pas que techniquement, il est garanti, en fonction de l'importateur.
mais n'est-il pas vrai que si je fais un SELECT * from big_table, il me donnerait les rangées dans le même ordre qu'ils ont été ajoutés? Si c'est le cas, je pourrais écrire un peu 3-liner pour ce faire, dans certaines langues, mais je pense qu'il y aurait un moyen pour SQL de le faire, comme une sorte de
ORDER BY NATURAL_ORDER
ou quelque chose comme ça.par "dernière" je veux juste dire que la dernière ligne importé
il ne fera que vous donner les lignes de l'organisation physique de la clé primaire (sauf si les données sont regroupées sur un autre champ) et même alors, l'ordre des données retournées par le moteur SQL n'est pas garantie pour être dans cet ordre.
OriginalL'auteur Tony
Ici toutes les réponses sont mieux, mais juste au cas où...
Il y a un moyen d'obtenir 10 derniers enregistrements. (tu c'est assez peu fiable 🙂 ) encore
vous pouvez faire quelque chose comme
N - devrait être le montant total de lignes dans la table (SELECT count(*) from table). Vous pouvez le mettre dans une seule requête à l'aide de requêtes préparées, mais je ne vais pas y arriver.
Je suis assez confiant sur le fait que MySQL supporte l'OFFSET. Si tous les sites web que j'ai créé au cours des 5 dernières années sont en grande difficulté 😀 très probablement la raison pourquoi il ne fonctionne pas pour vous, est que vous n'avez pas lu ma réponse à la fin. Vous devez remplacer N dans la requête avec un certain nombre de lignes dans la table. Donc à la fin de la requête devrait ressembler SELECT * from table LIMIT 10 OFFSET 1579-10 ou quelque chose comme ça. Et comme je l'ai triste, il est possible de faire cela en une seule requête à l'aide de requêtes préparées. Toutefois, pour que cette réponse n'est pas sur la syntaxe de MySQL, mais sur la façon dont vous pouvez le faire.
OriginalL'auteur Ivan
Sélectionnez à partir de la table, utilisez la COMMANDE PAR __ DESC pour trier dans l'ordre inverse, puis limiter vos résultats 10.
OriginalL'auteur Steven Scott
Vous pouvez utiliser le bouton "ORDER BY DESC" option, puis la remettre dans l'ordre d'origine:
(SELECT * from nomtable ORDER BY id DESC LIMIT 10) ORDER BY id;
Merci à vous, les autres réponses ne prennent pas en considération le fait que les données seront récupérées dans l'ordre inverse sans le supplément de la commande.
OriginalL'auteur Dustin Soodak
OriginalL'auteur user3305213
Si vous êtes en train de faire un
LOAD DATA INFILE 'myfile.csv'
opération, la meilleure façon de voir si toutes les lignes sont allés dans l'est de vérifiershow warnings();
Si vous chargez les données dans un vide ou d'une table temporaire, vous pouvez également vérifier le nombre de lignes qu'il a après l'insertion.OriginalL'auteur dnagirl
de l'exécution d'un count(*) de la requête sur les données big data est cher. je pense à l'aide de "SELECT * from table ORDER BY id DESC LIMIT n" où n est le nombre de lignes par page est mieux et plus léger
OriginalL'auteur Sameeh Harfoush
Une technologie rudimentaire: le Faire avec SQL peut-être exagéré. En fonction de votre question, vous avez juste besoin de faire un temps de vérification de l'importation.
Pourquoi ne pas simplement faire: SELECT * from ImportTable
et puis faites défiler vers le bas de la grille résultats et de vérifier visuellement la "dernière" de quelques lignes.
OriginalL'auteur Paul Sasik
Si vous savez comment un grand nombre de lignes à attendre, je voudrais créer une table temporaire dans votre base de données de la structure attendue, ajouter à, puis vérifier le décompte... une Fois que vous êtes bien avec cela, alors vous pouvez vous masser les données avant d'ajouter dans votre production finale de tableau.
OriginalL'auteur DRapp
vous pouvez avec une sélection de code de 10 ligne à partir de la fin du tableau.
select * from (SELECT * from table1 order by id desc LIMIT 10) table2 order by id"
OriginalL'auteur mahdiaction
Si vous souhaitez récupérer les 10 derniers enregistrements à partir de sql LIMITE d'utilisation.
Supposons que la base de données contient les 20 dossiers.Utiliser la requête ci-dessous
où 10,20 est la valeur de décalage.Où 10 représentent de départ de la limite et 20 est la fin de la limite.
je.e 20 -10=10 enregistrements
OriginalL'auteur Amal
Qui peut être fait à l'aide de la fonction limite, cela pourrait ne pas sembler nouveau, mais j'ai ajouté quelque chose.Le code devrait aller:
pour le cas ci-dessus supposent que vous avez 110 lignes de la table et que vous souhaitez sélectionner les dix dernières, 100 est la ligne que vous voulez commencer à imprimer(si vous êtes à l'impression), et dix indique le nombre de lignes que vous souhaitez récupérer à partir de la table.
Pour une plus précisé façon, vous pouvez commencer par sélectionner toutes les lignes que vous souhaitez imprimer, puis vous prenez le dernier id de ligne si vous avez une colonne d'id(je vous recommande de mettre un), soustrayez dix à partir du dernier numéro d'identification et qui sera l'endroit où vous souhaitez démarrer, ce qui fera de votre programme fonctionne de manière autonome et pour n'importe quel nombre de lignes, mais si vous écrivez directement la valeur je pense que vous devez changer le code à chaque fois que les données sont insérées dans la table.Je pense que cela aide.Pax et Bonum.
OriginalL'auteur Dr.Geek Nerd
Si vous n'avez pas essayé la commande suivante
Je vois c'est quand j'execute la commande
dans le Essayer vous-même fenêtre de commande de https://www.w3schools.com/sql/sql_func_last.asp
Oh, mon mauvais! Je n'ai pas remarqué que vous n'avez pas de colonne ID de là! La Solution à ce problème pourrait résider dans l'utilisation de la LIMITE de commande. Essayez la commande: > SELECT * from big_table LIMITE 24990,10
Encore une requête, on peut exécuter, seulement comme je l'ai trouver ça fonctionne maintenant: Déclarer un paramètre
x
et set c'est la valeur à zéro. ` SET @x=0;", Alors vous devez ajouter une colonne supplémentaire rang pour votre réponse comme:SELECT aColumnName, @x := @x+1 as rank FROM big_table;
voir quel sera le résultat? Maintenant, il suffit de mettre cette question dans notre prochaine requête:SELECT aColumnName FROM (SELECT *, @x := @x+1 as rank FROM big_table) AS P ORDER BY rank DESC LIMIT 0,10;
Espérons que cela fonctionne pour vous. 🙂OriginalL'auteur Md. Intishar Rahman