(Totalement nouveau en C ++. Venant de python.)
Vecteur de noms: namelist , vecteur de stats: statlist . Chaque nom est une table mysql et chaque statistique est une colonne dans cette table.
for (unsigned int i = 0; i < namelist.size(); i++)
{
for (unsigned int j = 30; j < statlist.size(); j++)
{
string selectcolumn = "SELECT %s FROM %s.%s", statlist, statlist, namelist;
const char* c = selectcolumn.c_str();
qstate = mysql_query(conn, c);
}
}
(je ne m'attends pas à ce que les gens fassent ça pour moi, j'ai juste besoin conseils / conseils. TOUTE aide est vraiment appréciée!)
Chaque ligne de colonne sera classée par centile puis divisée en groupes par 10 et placée dans un autre tableau.
3 Réponses :
Étant donné que statlist et namelist sont également des chaînes, vous pouvez utiliser l'opérateur de concaténation ("+" en C ++)
Par exemple, dans ce cas, vous ferait:
"SELECT " + statlist + " FROM " + namelist + "." + statlist
Un exemple pertinent transformerait cela d'un commentaire en une réponse. peut être
Si nous ne pouvons pas voir quels types sont statlist et namelist , nous pouvons seulement supposer qu'il s'agit de std :: vector . Je ne sais pas vraiment si c'est la "logique" que vous voulez, mais vous pouvez concaténer la chaîne comme ceci:
for (unsigned int i = 0; i < namelist.size(); i++)
{
for (unsigned int j = 30; j < statlist.size(); j++)
{
std::string selectcolumn = "SELECT " + statlist[j] +"FROM " + statlist[j] + "." + namelist[i];
const char* c = selectcolumn.c_str();
qstate = mysql_query(conn, c);
}
}
- Comment associer correctement des variables à la chaîne% s dans la boucle ici?
Si vous recherchez un équivalent direct de ce que vous faites en Python, vous recherchez peut-être
printf ().Cependant, je ferais probablement ce que d'autres ont suggéré, et je concaténerais simplement les chaînes directement:
string selectcolumn = "SELECT " + statlist " FROM " + statlist "." + namelist;Cela dit, je vous rendrais un mauvais service si je ne vous prévenais pas de SQL Injection , auquel vous êtes ouvert en insérant simplement ces données dans votre requête. Il existe de nombreuses façons d'éviter cela , même si je ne sais pas comment cela s'applique au C ++, comme vous semblez l'être en utilisant une bibliothèque SQL tierce. Cependant, j'imagine que le principe est le même.
2. Dois-je générer dynamiquement un vecteur pour chaque colonne lorsque je la sélectionne? 3.Une fois que j'ai sélectionné une colonne de table, dois-je utiliser une boucle while?
Cela dépend vraiment de ce que vous utilisez pour vous connecter avec votre serveur SQL et de la manière dont les données vous sont restituées. Les détails ne sont pas clairs, car il est impossible de répondre correctement à cette partie.
Super article! (pour 2 & 3: en utilisant un dataframe pandas, ce serait simple à faire). Lorsque je sélectionne une colonne dans la table SQL, je souhaite classer chaque ligne de cette colonne par centile. Dois-je d'abord stocker les lignes de colonne dans un vecteur, puis calculer les valeurs? Ces valeurs seront ensuite stockées dans une autre table.
Btw j'utilise ceci si vous êtes curieux: dev.mysql.com/doc/refman/8.0/en/connector-cpp-info.html
Pouvons-nous voir à quoi ressemblent un
nomet unestatistique?@ AlgirdasPreidžius Cette chaîne est une requête mysql pour sélectionner une colonne dans une table.
Même en python, cette logique ne fonctionnerait pas. Vous devez utiliser i et j pour accéder aux éléments de votre vecteur. Le formatage de votre chaîne ne peut pas fonctionner de cette façon, regardez le flux de chaînes pour cela
Sauf en utilisant
statListdeux fois, la requête est absurde, je penseVotre combinaison actuelle de C ++ / SQL n'est pas connue, mais vous ne pouvez clairement pas initialiser une chaîne comme celle-ci en C ++ avec des spécificateurs de format (pour la chaîne ou quoi que ce soit d'autre) qui lui sont attachés.
@johnmondego Ce n'est pas ce que j'ai demandé. Laissez-moi vous expliquer, que doit faire
"SELECT% s FROM% s.% S", statlist, namelist, statlist;? Il semble que vous recherchezprintfa>, mais, malgré tout, vous devriez envisager d'apprendre le C ++ à partir d'un bon livre, au lieu de coder au hasard.Les noms @ NathanOliver-ReinstateMonica sont un vecteur de symboles boursiers. Les statistiques sont les prix, les retours, le volume, etc. La requête doit être "SÉLECTIONNER les prix à partir des prix.nom
Un
stringstreamest-il similaire à ce que vous recherchez? Vous permet de créer une chaîne à partir de variables telles que:std :: stringstream example; exemple << "SELECT" << statlist [i] << "FROM" << namelist [j] << "." << statlist [i]; std :: string selectcolumn = example.str ();(Remarque: Code non testé de quelque manière que ce soit, forme ou forme)Ceci est une recette pour une injection sql . Juste dire.
@ AlgirdasPreidžius C'est juste une chaîne qui est passée à mysql sous forme de requête. J'essaie d'associer les variables statlist et namelist actuelles de la boucle au% s mais est-ce que je manque un index?
@ user11923373 On dirait que ça pourrait être oui. J'essaierai. Merci d'avoir commenté!
Sauf erreur de ma part,
mysql_queryn'est pas une fonction C ++ standard. Utilisez-vous une bibliothèque spécifique?@Chipster J'utilise un connecteur mysql pour C ++