Je compare des tables de base de données sur un serveur de développement à un serveur en direct, en recherchant les changements de nom de colonne, les nouvelles colonnes et les colonnes qui ont été supprimées. Je voudrais faire quelque chose comme ceci:Sortie du groupe SHOW COLUMNS dans une liste délimitée par des virgules
SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
Ce que je suis après une liste délimitée par des virgules que je peux alors prendre au serveur en direct et faire:
SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Toute réflexion sur la façon préférable de le faire - soit en me corrigeant dans ma propre approche, ou par un autre moyen tous ensemble? Évidemment, le SQL ci-dessus ne fonctionne pas. Remarque: Les serveurs sont entièrement séparés et ne peuvent pas communiquer entre eux. Aucune comparaison directe n'est donc possible.
EDIT
Merci pour les réponses, les gars! L'application de vos réponses à la question, ceci est mon SQL finale pour obtenir les noms de colonnes:
SELECT CONCAT("'", GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR "', '"), "'") AS columns
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name'
Cela me donne une liste qui ressemble à ceci:
'id', 'name', 'field1', 'field2'
Ensuite, je peux utiliser cette requête pour comparer :
SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name' AND column_name NOT IN ('id', 'name', 'field1', 'field2')
Les résultats sont une liste des colonnes qui existent dans la première base de données et pas dans la seconde. Parfait!
Merci, Ike. Nick était avant vous, mais +1 pour votre réponse, très apprécié! –