2010-01-17 5 views
0

J'écris un éditeur sql (sqlite3).Méthode générique pour identifier le champ dans le tableau

Je peux afficher une table et permettre aux utilisateurs d'éditer n'importe quelle valeur dans la table mais j'ai maintenant besoin d'un moyen d'identifier la valeur éditée. Le problème est que je ne sais pas quelle est la clé primaire et je ne pense pas que ce soit une bonne idée de dire "mettre à jour la table a = b où x = 123 et y = 123 et z = 123 et ... "pour tous les champs qui ne sont pas" a ". J'utilise jquery (et ajax) et PHP.

Des idées?

Répondre

1

Si vous ne savez pas ce que la clé primaire est (ou vous ne savez pas s'il y a un indice UNIQUE), vous n'aurez pas beaucoup de choix: même si vous utilisez tous les champs de votre where clause, vous pouvez mettre à jour plusieurs lignes (celle que l'utilisateur voulait modifier) ​​.

Vous avez vraiment besoin d'un moyen d'identifier une ligne précise - et de cette façon est la clé primaire.


Peut-être, juste par curiosité, vous mon contrôle comment phpMyAdmin fait cela?
(je sais que ce n'est pas SQLite, mon MySQL - mais peut-être l'idée générale pourrait être réutilisée?)

+0

J'écris quelque chose de similaire à phpMyAdmin - je n'avais pas pensé à vérifier leur code, merci – jcuenod

+0

malheureusement sqlite ne supporte pas les commandes show/describe ... – jcuenod

0

Vous pouvez forcer l'utilisateur de spécifier une clé primaire (ou au moins un UNIQUE) puis récupérer avec SHOW INDEX FROM table (http://dev.mysql.com/doc/refman/5.0/en/show-index.html)

+0

montre l'index de

est ce que je cherchais, merci, mais maintenant pour l'obtenir pour sqlite3? – jcuenod

+0

La requête SQL est la même dans sqlite je pense. Vous pouvez donc obtenir la clé primaire avec 'SHOW INDEX FROM table WHERE nom_clé =" PRIMARY "', dans le champ "Nom_colonne". – Pikrass

+0

Malheureusement, il semble que "select sql de sqlite_master où name = 'nomtable';" est aussi proche qu'il obtient qui ne renvoie que l'instruction sql qui peut être utilisée pour générer la table ... – jcuenod

0

Si vous ne pouvez pas déterminer PK ou colonne au Royaume-Uni, alors vous devez utiliser « où x = 123 et y = 123 et z = 123 », mais rappelez-vous d'ajouter LIMIT 1 - vous êtes sûr vous n'éditez pas plus d'un enregistrement.

+0

merci l'idée d'utiliser une limite dans une mise à jour ne m'était pas venu à l'esprit ... – jcuenod

0

Il n'est en effet pas une bonne idée d'émettre cette mise à jour '... pour tous les champs qui ne sont pas'. Vous devez également inclure un, avec l'ancienne valeur de a dans la ligne qui a été modifiée.

+0

ahh, très vrai - merci , on dirait que c'est la méthode que je vais devoir utiliser ... – jcuenod

Questions connexes