[C] Hilfe bei MySQL

[C] Hilfe bei MySQL

am 04.09.2006 09:04:36 von benjamin235

Hallo Leute!

Ich bräuchte mal Hilfe von euch! Also ich habe 2 Tabellen und aus
einer Tabelle ermittle ich die Anzahl von bestimmten Wörtern:

"SELECT * FROM mydb.tabelle1 WHERE mydb.tabelle1.TYPE =3D 'Request'"

Soweit so gut. Jetzt möchte ich aber die Anzahl dieser gefundenen
Wörter in eine andere Tabelle eintragen. Ich hab das mal so gemacht:

result =3D mysql_store_result(conn);

sprintf(sql, "UPDATE alarmmanager.tabelle2 SET
alarmmanager.tabelle2.Requests =3D '%i'", (int)mysql_num_rows(result));

Das Programm läuft einwandfrei durch und es gibt keinerlei Fehler, nur
wird nichts in die Tabelle2 eingetragen. Was mach ich denn da falsch?
Könnt ihr mir helfen?

Gruß Benjamin

Re: [C] Hilfe bei MySQL

am 04.09.2006 09:32:08 von Gregor Kofler

benjamin235@web.de meinte:

Ein Realname wäre schon schön...
Was hat das [C] im Subject zu bedeuten?

> Ich bräuchte mal Hilfe von euch! Also ich habe 2 Tabellen und aus
> einer Tabelle ermittle ich die Anzahl von bestimmten Wörtern:
>
> "SELECT * FROM mydb.tabelle1 WHERE mydb.tabelle1.TYPE = 'Request'"
>
> Soweit so gut. Jetzt möchte ich aber die Anzahl dieser gefundenen
> Wörter in eine andere Tabelle eintragen. Ich hab das mal so gemacht:
>
> result = mysql_store_result(conn);

1. Was macht mysql_store_result?

2. flasche NG. f'up gesetzt.

3. Die Anzahl der Records kann ich mir auch gleich über eine Query
liefern lassen.

4. Ein Realname erhöht die Chance, dass dir jemand hilft. Und das willst
du ja schließlich...

Gregor



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Hilfe bei MySQL

am 04.09.2006 09:43:19 von benjamin235

Gregor Kofler schrieb:

> benjamin235@web.de meinte:
>
> Ein Realname wäre schon schön...
> Was hat das [C] im Subject zu bedeuten?
>
Das bedeutet dass ich das ganze in C schreibe!
> >
> > "SELECT * FROM mydb.tabelle1 WHERE mydb.tabelle1.TYPE =3D 'Request'"
> >
> > Soweit so gut. Jetzt möchte ich aber die Anzahl dieser gefundenen
> > Wörter in eine andere Tabelle eintragen. Ich hab das mal so gemacht:
> >
> > result =3D mysql_store_result(conn);
>
> 1. Was macht mysql_store_result?

Holt eine vollständige Ergebnismenge auf den Client

> 3. Die Anzahl der Records kann ich mir auch gleich über eine Query
> liefern lassen.

Und wie geht das?

> 4. Ein Realname erhöht die Chance, dass dir jemand hilft. Und das willst
> du ja schließlich...

Ja möchte ich aber mein echter Name ist Benjamin! Der Nachname ist
völlig uninteressant!

> Gregor
>
>
>
> --
> http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
> http://www.licht-blick.at ::: Forum für Multivisionsvorträge
> http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Hilfe bei MySQL

am 04.09.2006 10:34:02 von benjamin235

Gregor Kofler schrieb:

> benjamin235@web.de meinte:
>
> Ein Realname wäre schon schön...
> Was hat das [C] im Subject zu bedeuten?

Mein Name ist Benjamin - das reicht doch, oder?
Das C bedeutet dass ich in C programmiere.

> > result =3D mysql_store_result(conn);
>
> 1. Was macht mysql_store_result?

Holt eine vollständige Ergebnismenge auf den Client

> 3. Die Anzahl der Records kann ich mir auch gleich über eine Query
> liefern lassen.

Wie genau geht das denn?


> --
> http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
> http://www.licht-blick.at ::: Forum für Multivisionsvorträge
> http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Hilfe bei MySQL

am 04.09.2006 10:38:50 von Gregor Kofler

Buba meinte:

Pffff.

> Das bedeutet dass ich das ganze in C schreibe!

Ok. Dann f'up wieder zurück. Sorry. Für die API-Sache ist d.c.d.mysql
aber weiterhin nicht "zuständig".

> Und wie geht das?
>

Ein Blick ins Manual hilft:
http://dev.mysql.com/doc/refman/4.0/de/group-by-functions.ht ml

>> 4. Ein Realname erhöht die Chance, dass dir jemand hilft. Und das willst
>> du ja schließlich...
>
> Ja möchte ich aber mein echter Name ist Benjamin! Der Nachname ist
> völlig uninteressant!

Für die meisten die hier mitlesen nicht.

Gregor



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: [C] Hilfe bei MySQL

am 04.09.2006 11:33:43 von Axel Schwenke

benjamin235@web.de wrote:
^^^^^^^^^^^
Hier fehlt ein Realname. Nein, nur der Vorname reicht nicht.
Betrachte diese Antwort als Vorschuß. Weitere Postings von dir
ohne Realname gehen ungelesen in die Tonne.

> Ich bräuchte mal Hilfe von euch! Also ich habe 2 Tabellen und aus
> einer Tabelle ermittle ich die Anzahl von bestimmten Wörtern:
>
> "SELECT * FROM mydb.tabelle1 WHERE mydb.tabelle1.TYPE = 'Request'"

Ganz schlechte Idee.

1. man schreibt in Produktions-Code niemals 'SELECT *'
-> http://www.php-faq.de/q/q-sql-select.html
"Warum soll ich nicht SELECT * schreiben?"

2. man schreibt schon gar nicht SELECT *, wenn man nur die Anzahl von
Treffern wissen will. SQL bietet dafür die COUNT() Funktion.
-> http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.ht ml

> Soweit so gut. Jetzt möchte ich aber die Anzahl dieser gefundenen
> Wörter in eine andere Tabelle eintragen. Ich hab das mal so gemacht:
>
> result = mysql_store_result(conn);
>
> sprintf(sql, "UPDATE alarmmanager.tabelle2 SET
> alarmmanager.tabelle2.Requests = '%i'", (int)mysql_num_rows(result));

Numerische Literale werden in SQL nicht gequotet. Ein weniger fehler-
tolerantes DBMS würde dir UPDATE foo SET bar='42' um die Ohren hauen,
wenn bar einen numerischen Typ hat. Richtig: UPDATE foo SET bar=42

> Das Programm läuft einwandfrei durch und es gibt keinerlei Fehler, nur
> wird nichts in die Tabelle2 eingetragen. Was mach ich denn da falsch?

Du denkst nicht in SQL. Das kannst du direkt in der Datenbank machen.
Hinreichend neue MySQL-Versionen (ab 4.1) können Subqueries:

UPDATE foo SET bar=(SELECT COUNT(*) FROM baz WHERE ...)

Auch die ältesten MySQL-Versionen haben User-Variablen:

SELECT @x:=COUNT(*) FROM baz WHERE ...
UPDATE foo SET bar=@x

Details zu Subqueries und User-Variablen verrät dir das freundliche
Manual: http://dev.mysql.com/doc/refman/5.0/en/index.html


XL

Re: Hilfe bei MySQL

am 04.09.2006 13:46:27 von Thomas Rachel

Gregor Kofler wrote:

> Ok. Dann f'up wieder zurück. Sorry. Für die API-Sache ist d.c.d.mysql
> aber weiterhin nicht "zuständig".


Aus der Charta:

| Diese Gruppe dient der Diskussion aller das Relationale
| Datenbank-Management-System MySQL betreffenden Fragen. Dabei kann auch
| seine Nutzung zusammen mit anderen Programmen und Systemen diskutiert
| werden, sofern diese nicht von anderen Newsgruppen abgedeckt wird.

IMHO ist die C-API als "integraler" Bestandteil von MySQL (im Gegensatz zu
anderen APIs) durchaus hier ontopic.


Thomas
--
Having trouble in Windows? Reboot!
Having trouble in Unix? Be root!

Re: Hilfe bei MySQL

am 04.09.2006 14:40:41 von Gregor Kofler

Thomas Rachel meinte:
> Gregor Kofler wrote:
>
>> Ok. Dann f'up wieder zurück. Sorry. Für die API-Sache ist d.c.d.mysql
>> aber weiterhin nicht "zuständig".
>
>
> Aus der Charta:
>
> | Diese Gruppe dient der Diskussion aller das Relationale
> | Datenbank-Management-System MySQL betreffenden Fragen. Dabei kann auch
> | seine Nutzung zusammen mit anderen Programmen und Systemen diskutiert
> | werden, sofern diese nicht von anderen Newsgruppen abgedeckt wird.
>
> IMHO ist die C-API als "integraler" Bestandteil von MySQL (im Gegensatz zu
> anderen APIs) durchaus hier ontopic.

Entschuldigung. Dachte es gibt dazu sicher auch passendere NGs (aber
eben: nur *gedacht*).

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Hilfe bei MySQL

am 04.09.2006 15:01:47 von Thomas Rachel

Gregor Kofler wrote:

>> IMHO ist die C-API als "integraler" Bestandteil von MySQL (im Gegensatz
>> zu anderen APIs) durchaus hier ontopic.
>
> Entschuldigung.

Kein Problem.


> Dachte es gibt dazu sicher auch passendere NGs (aber
> eben: nur *gedacht*).

In den "passenderen" NGs wiederum geht es nur um C an sich - alles, was über
den ISO-Standard hinausgeht (Bibliotheken wie etwa libmysqlclient), ist
dort off-topic.

Allerdings sehe ich die Grenzen der Zuständigkeit dieser NG auch eher eng.

Konkrete "Funktionsweisen-Probleme" sind IMHO on-topic, wie etwa die
Notwendigkeit, mysql_insert_id() direkt nach die Query abzufragen, im
Gegensatz zu der MySQL-Funktion LAST_INSERT_ID(), wo es reicht, sie vor dem
nächsten AUTO_INCREMENT-triggernden INSERT abzufragen.

Die Frage "Wie führe ich einen Query aus, der in einem C++-std::String
gespeichert ist?" sehe ich eher als offtopic an. Sie zeigt eher, daß der
Frager sich mit der Programmiersprache etwas besser auseinandersetzen
sollte.


Thomas
--
Ich verkehre nicht in dsnu. Ich erspare mir Flamer-Gruppen.
(Michael Enezian in <3BD61803.F3EA315A@webshuttle.ch>)