2009-11-10 9 views
0

Actuellement, j'ai une page «ajouter votre annonce ici», avec un formulaire.Ajout d'une annonce à une base de données mysql; Pointez-moi dans la bonne direction s'il vous plaît

Maintenant, l'utilisateur doit choisir dans quelle catégorie il voudra poster une annonce dans ...

J'ai une table pour chaque catégorie dans une base MySQL.

Maintenant, ma question, comment pourrais-je rendre chaque annonce unique, avec un numéro d'identification? Si j'ai plusieurs tables, l'incrémentation automatique pourrait être la même dans certaines publicités, ai-je raison? Comment cela est-il habituellement résolu? Affectation d'un numéro aléatoire à chaque annonce avec javascript?

Rappelez-vous ceci: J'ai aussi une entrée du fichier « télécharger l'image » où je dois définir le nom d'image identique à l'id ad ...

Merci

MISE À JOUR: Si je mets toutes les annonces dans un tableau, n'est-ce pas ralentir la recherche dans la base de données? N'y a-t-il pas d'autre moyen de le faire?

+0

Je remarque que tout le monde me donne à peu près la même réponse, mais ne pas ajouter toutes les annonces à la même table ralentir ma recherche db plus tard? Y a-t-il une limite sur une table mysql? Je pourrais avoir comme 500 mille annonces ... –

+0

Je veux clarifier mon commentaire. Les limites de la quantité de données que vous pouvez stocker sont basées davantage sur les ressources du serveur (en particulier les tailles de fichier) que sur le logiciel MySQL lui-même. Je me souviens d'une table quelque part sur le site MySQL qui décrit les limites en fonction du système d'exploitation que vous utilisez. – Jeff

Répondre

2

Ceci est un problème de normalisation. Les annonces constituent une classe distincte d'objets et toutes les annonces doivent figurer dans la même table. De même, les catégories doivent figurer dans la même table, et vous devez ensuite insérer un ID de catégorie dans votre enregistrement d'annonce, en supposant que vous devez importer des données de catégorie.

Modifier: Nah, ne devrait pas être un problème. J'ai vu des systèmes de publicité dans les journaux sur ce modèle qui ont des millions d'annonces (ils stockent généralement par annonce, puis par "date d'exécution", de sorte qu'un enregistrement d'annonce peut contenir une centaine d'enregistrements de dates d'exécution). temps d'interroger. Déterminez simplement comment vous allez accéder aux annonces (par date, par catégorie, etc.) et configurez vos index en conséquence, et ça devrait aller.

+0

Je remarque que tout le monde me donne à peu près la même réponse, mais ne pas ajouter toutes les annonces à la même table ralentir ma recherche db plus tard? Y a-t-il une limite sur une table mysql? Je pourrais avoir comme 500 mille annonces. –

+0

Les tables Mysql peuvent contenir des millions et des millions de lignes. Donc, sauf si vous êtes Google AdWords qui ne devrait pas être un problème. –

1

Oui, vous pouvez rendre chaque annonce unique en utilisant un identifiant qui dans ce cas devrait probablement être incrémenté automatiquement. Pour résoudre le problème de plusieurs annonces avec le même ID, mettez toutes les annonces dans une table et ajoutez une colonne qui stocke la catégorie d'annonces.

Immédiatement après avoir inséré une nouvelle annonce dans la base de données, utilisez la fonction mysql_insert_id() afin d'obtenir le dernier identifiant incrémenté automatiquement. Utilisez-le pour votre nom d'image.

Bonne chance.

+0

ne va pas ralentir le db? Je pourrais finir avec 500 mille annonces ... Serait-ce toujours le chemin? –

+0

Dépend des requêtes que vous exécutez. Oui, un SELECT de base sur une table de 100 000 lignes sera plus lent que la même requête sur une table de 500 000. Toutefois, si vous avez besoin d'obtenir simultanément des annonces provenant de plusieurs catégories, vous exécutez plusieurs requêtes qui seront beaucoup plus lentes qu'une requête sur une table plus grande et correctement indexée. –

0

Tant que vous ne réinitialisez pas manuellement l'ID, le réglage de l'incrémentation automatique sera toujours plus important que le dernier ajouté.

Si vous voulez faire les choses différemment, utilisez un UUID généré de manière aléatoire. MYSQL a un built in UUID() function pour aider ici.

1

serait-il possible de créer une table avec une colonne pour suivre la catégorie de chaque annonce insérée? De cette façon, l'identifiant généré automatiquement sera toujours unique. Et cette approche pourrait être plus facile à maintenir à long terme.

0

Il semble que vous ayez besoin de travailler sur votre schéma db. Je suggère une table pour toutes les annonces quel que soit le type (inclure un champ ad_type pour les différencier si vous le souhaitez) avec une clé primaire auto_increment. Si les annonces ne peuvent contenir qu'une seule image, vous pouvez également stocker le chemin d'accès au fichier dans la table ad. Sinon, créez une table distincte ad_pictures avec une clé étrangère référençant le ad_id.Lorsque vous insérez dans votre tableau ad, vous pouvez obtenir le last_insert_id() et l'utiliser pour créer la requête ad_pictures INSERT.

0

Si vous avez absolument besoin de connaître le nom de l'image avant de soumettre le formulaire, vous pouvez envisager de générer un UUID lors de l'affichage du formulaire. Utilisez l'UUID comme ID d'annonce et le nom de l'image.

Mais les chances sont, ce que vous voulez est la suivante: accepter le téléchargement d'image lors de la soumission de formulaire, traiter la soumission, insérer la ligne, obtenir l'ID de ligne, puis enregistrer l'image basée sur cet ID. Tant que vous normalisez correctement votre base de données (par exemple, une seule table pour toutes les annonces, une seule table pour toutes les catégories et peut-être une table intermédiaire reliant les deux) et utilisez une clé primaire auto incrémentée Ensuite ça devrait aller.