Sélectionnez MYSQL lignes, mais les lignes en colonnes et en lignes
Je veux sélectionner toutes les lignes dans ma base de données mais je les veux en inversion de la séquence. Sens, je veux utiliser la première colonne des données comme les nouvelles entités et de présenter des entités de la première colonne. Je pense que vous avez obtenu ce que je veux dire
Voici une illustration
id | name | marks
-------------------------------
1 | Ram | 45
--------------------------------
2 | Shyam | 87
à
id | 1 | 2 |
----------------------------
Name | Ram | Shyam |
----------------------------
Marks | 45 | 87 |
Vous avez besoin de l'inverse de la séquence en PHP ? En SQL, il n'aurait pas de sens, je suppose...
Checkout stackoverflow.com/questions/1241178/mysql-rows-to-columns - mais pouvez-vous expliquer POURQUOI vous voulez cette? Il y a sans doute une meilleure solution.
Je sais comment le faire en PHP? Mais j'ai besoin d'une solution sql
C'est probablement ce qui ne peut pas être fait dans mySQL. Ce n'est pas ce qu'il a été conçu.
Checkout stackoverflow.com/questions/1241178/mysql-rows-to-columns - mais pouvez-vous expliquer POURQUOI vous voulez cette? Il y a sans doute une meilleure solution.
Je sais comment le faire en PHP? Mais j'ai besoin d'une solution sql
C'est probablement ce qui ne peut pas être fait dans mySQL. Ce n'est pas ce qu'il a été conçu.
OriginalL'auteur Starx | 2010-07-20
Vous devez vous connecter pour publier un commentaire.
Avec un fixe et connu colonnes, voici comment faire (j'ai pris la liberté de nommer la table "grades"):
Idée Générale:
De créer une union des différentes requêtes et de l'exécuter.
Car vous avez besoin de données réelles comme en-têtes de colonne, la première partie de l'union ressemblera:
Cette requête seront les seuls à dupliquer le résultat, nous avons donc besoin de dire à MySQL nous avons besoin d'avoir 0 lignes en ajoutant
LIMIT 0, 0
.Notre première ligne de l'union contiendra
'Name'
, ainsi que toutes les données de colonne "Nom" de la table. Pour obtenir cette ligne nous avons besoin d'une requête comme:En utilisant la même logique, notre deuxième ligne ressemblera à:
Obtenir l'en-tête:
Nous avons besoin pour produire une ligne de MySQL comme:
Pour obtenir cette ligne, nous allons utiliser CONCAT() et GROUP_CONCAT() fonctions:
et nous allons stocker cette ligne dans une nouvelle variable:
La création de lignes:
Nous avons besoin de créer deux requêtes comme suit:
Puisque nous ne savons pas à l'avance combien de lignes il y a dans notre table d'origine, nous allons utiliser des variables pour générer les différents
LIMIT x, 1
consolidés. Ils peuvent être produits en utilisant les éléments suivants:À l'aide de cet extrait, nous pouvons créer notre sous-requêtes:
Quoi nous mettre dans une variable noms de @line1, avec la première colonne de données (qui est la deuxième colonne du nom):
En suivant la même logique, la deuxième ligne sera:
Combinant tous les:
Nos trois variables contiennent maintenant:
Nous avons juste besoin de créer une variable finale à l'aide de
CONCAT()
, préparer une nouvelle requête et de l'exécuter:Ensemble de la solution:
(pour l'essai et de référence):
De sortie:
Réflexions:
Je ne suis toujours pas sûr de savoir pourquoi vous avez besoin pour transformer les lignes en colonnes, et je suis sûr que la solution que j'ai présenté n'est pas le meilleur (en termes de performances).
Vous pouvez même utiliser ma solution pour un début, et l'adapter à un usage général la solution, où les noms de colonne de table (et le nombre de lignes) ne sont pas connus, à l'aide de
information_schema
.COLUMNS
en tant que source, mais je suppose que c'est juste le fait d'aller trop loin.Je crois qu'il est beaucoup mieux de mettre de la table d'origine dans un tableau et ensuite faire tourner ce tableau, ainsi obtenir les données dans le format souhaité.
OriginalL'auteur Anax
Semble que vous vous êtes à la recherche d'un tableau croisé (ou transposer) exploitation de vos données.
Voici un excellent article qui décrit comment procéder: http://onlamp.com/pub/a/onlamp/2003/12/04/crosstabs.html - c'est un peu daté mais, vous ne savez pas si maintenant il y a des manières plus efficaces d'y parvenir. Il fonctionne assez bien pour moi.
OriginalL'auteur kander
Sur la ligne de commande vous pouvez mettre fin à votre requête avec \G pour atteindre cet
par exemple,
d'accord. Et je ne sais pas si ce serait même travail avec php mysql fonctions, mais ce est la chose la plus proche que je connais 🙂
OriginalL'auteur Gunjan