Est-ce qu'il y a des développeurs pour m'aider sur une requête SQL ?

PasseVaccinal
2022-12-31 11:36:48

J'ai 2 tables. Une table joueurs avec la liste des tout les joueurs et une table classement où je veux insérer une ligne avec les 5 meilleurs joueurs, table qui comporte donc 5 colonnes.

Voici ma requête :

INSERT INTO classement (joueur_1, joueur_2, joueur_3, joueur_4, joueur_5)
SELECT nom
FROM joueurs
WHERE score > 0
ORDER BY score DESC
LIMIT 5

Mais j'ai une erreur "Column count doesn't match value count at row 1"

ChatGPT ne dit que la requête est correcte or elle ne l'est pas, car mySQL attend un select avec 5 champs pour les insérer dans les 5 colonnes, mais moi je veux insérer les 5 lignes de résultat du select grâce à LIMIT 5

bugzandmonkeyz
2022-12-31 11:38:42

je crois que la colonne du order by doit etre dans le select

PasseVaccinal
2022-12-31 11:45:25

Non, ça ne joue pas.
C'est marrant, j'ai posé le problème à ChatGPT, il me sort exactement la même requête SQL que j'ai faite seul de mon coté :

https://image.noelshack.com/fichiers/2022/52/6/1672483466-capture-d-ecran-2022-12-31-114433.jpg

Requête qui est incorrecte.

MoxromSept1
2022-12-31 11:46:13

Tu fais un print et c'est bon. :(

azqsdxcvcfgfnnn
2022-12-31 11:47:58

Sans même connaitre le projet on voit tout de suite que cette table classement ne sert à rienhttps://image.noelshack.com/fichiers/2021/04/4/1611841177-ahiahiahi.png

PasseVaccinal
2022-12-31 11:51:03

Le 31 décembre 2022 à 11:47:58 :
Sans même connaitre le projet on voit tout de suite que cette table classement ne sert à rienhttps://image.noelshack.com/fichiers/2021/04/4/1611841177-ahiahiahi.png

Elle sert d'historique quand je remets les scores à zero. Pour conserver les 5 meilleurs joueurs

PasseVaccinal
2022-12-31 11:51:22

Le 31 décembre 2022 à 11:46:13 :
Tu fais un print et c'est bon. :(

Tu peux expliquer stp ?

bugzandmonkeyz
2022-12-31 11:53:25

Le 31 décembre 2022 à 11:45:25 :
Non, ça ne joue pas.
C'est marrant, j'ai posé le problème à ChatGPT, il me sort exactement la même requête SQL que j'ai faite seul de mon coté :

https://image.noelshack.com/fichiers/2022/52/6/1672483466-capture-d-ecran-2022-12-31-114433.jpg

Requête qui est incorrecte.

et si tu fais un select * tu as la même erreur ?

PoubzDep15
2022-12-31 11:54:47

Donc tu veux insérer 5 lignes dans 5 colonnes ? Juste en faisant un select ?? :(

ChocoRat-3
2022-12-31 11:54:53

up pour t'aider

PasseVaccinal
2022-12-31 11:55:14

Le 31 décembre 2022 à 11:53:25 :

Le 31 décembre 2022 à 11:45:25 :
Non, ça ne joue pas.
C'est marrant, j'ai posé le problème à ChatGPT, il me sort exactement la même requête SQL que j'ai faite seul de mon coté :

https://image.noelshack.com/fichiers/2022/52/6/1672483466-capture-d-ecran-2022-12-31-114433.jpg

Requête qui est incorrecte.

et si tu fais un select * tu as la même erreur ?

oui

PasseVaccinal
2022-12-31 11:55:43

Le 31 décembre 2022 à 11:54:47 :
Donc tu veux insérer 5 lignes dans 5 colonnes ? Juste en faisant un select ?? :(

Yes, c'est ça. Rien de fou en soit

PoubzDep15
2022-12-31 11:56:06

Mais tu peux pas insérer 1 ligne de 5 colonnes en faisant le Select de 5 lignes d'une autre table. Transforme tes 5 lignes en 1 ligne et insère la.

7_B
2022-12-31 11:58:36

Change ta table du top 5 en ayant une seule colonne playerId et ta requête fonctionne

PasseVaccinal
2022-12-31 11:59:42

Le 31 décembre 2022 à 11:56:06 :
Mais tu peux pas insérer 1 ligne de 5 colonnes en faisant le Select de 5 lignes d'une autre table. Transforme tes 5 lignes en 1 ligne et insère la.

Il me reste plus qu'à faire ça, récupérer les variables.
Mais je comptais faire ça avec une seule ligne SQL.
C'est dingue qu'on ne puisse pas.

PoubzDep15
2022-12-31 12:00:16

Tu peux avec des jointures.

PasseVaccinal
2022-12-31 12:01:42

Le 31 décembre 2022 à 11:58:36 :
Change ta table du top 5 en ayant une seule colonne playerId et ta requête fonctionne

Oui mais c'est pas ce que je veux. je veux une ligne de 5 colonnes, chaque ligne étant un classement différant.

PoubzDep15
2022-12-31 12:02:00

Essaie une query pivot :

SELECT *
FROM
(
SELECT joueur, rang
FROM Classement
WHERE rang <= 5
) src
PIVOT
(
MAX(joueur)
FOR rang IN (1, 2, 3, 4, 5)
) piv;

PasseVaccinal
2022-12-31 12:02:34

Le 31 décembre 2022 à 12:00:16 :
Tu peux avec des jointures.

Je ne suis pas très à l'aise avec les jointures, mais c'est sur qu'on doit pouvoir faire avec

PoubzDep15
2022-12-31 12:02:38

Comme ça tu devrais avoir 1 ligne de 5 colonnes, avec comme colonne le joueur correspondant à son rang classé du 1 au 5.

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    ⚠️ Les archives de novembre sont désormais disponibles.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.