[C] Inhalt einer Tabelle ermitteln

Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich bräuchte mal wieder euere Hilfe. In meinem Programm (C unter Linux auf MySQL) muss ich den Inhalt der ersten Spalte der Tabelle ermitteln und wenn dort nichts drin steht, soll eine 1 eingetragen werden. Sollte bereits etwas drin stehen, dann soll nichts mehr hineingeschrieben werden und das Programm soll einfach weiter machen. Ich hab einfach mal das gemacht:

Code:
empty = "SELECT * FROM tabelle.Spalte";
/* Ausführen */

if (empty == NULL) {
    sql = "INSERT INTO tabelle (Spalte) VALUES (1)";
    /* Ausführen */
}

Nur so scheint es nicht zu klappen. Wie geht es aber richtig? Habt ihr da mal nen Ansatz für mich?

Gruß
Buba
 
Bevor ich das vergesse. Die erste Spalte ist die ID (auto_increment), aber ich kann ja in eine leere Tabelle nichts mit UPDATE machen. Ich will also den ersten Eintrag (in der ID) mit 1 machen, falls die ganze Tabelle noch leer ist. Wenn sie nicht mehr leer sein sollte, dann soll das Programm ganz einfach weiter machen. Gibt es da vielleicht noch eine einfachere Art?
 
Hi.

Du könntest da die SQL COUNT Funktion verwenden um die Anzahl der Zeilen in der Tabelle zu ermitteln.

z.B. komplett in SQL:
SQL:
insert into tabelle (spalte) select 1 from (select count(id) as rows from tabelle) as temp1 where rows = 0;
Allerdings, warum willst du denn überhaupt manuell da eine ID einfügen. Auto_increment hätte doch sowieso die 1 eingefügt wenn du einen Datensatz der Tabelle hinzugefügt hättest?

Gruß
 
Ich will da was einfügen, weil ich später nur Update-Befehle benutze und ein Update doch nicht geht, wenn nichts in der Tabelle steht. Ich will also einen Datensatz anlegen, damit ich Updates machen kann. Ich will also nur einmal die 1 eintragen und dann geht alles von selbst! Wenn es noch ne einfachere Möglichkeit gibt, bin ich auch für die zu haben!
 
Wie willst du denn später nur UPDATE Befehle benutzen - damit kannst du ja keine Datensätze mehr hinzufügen und es bleibt immer nur ein einzelner Datensatz in der Tabelle?!

Gruß
 
Hallo!


Also ich hab das ganze falsch verstanden. Ich muss da was ganz anderes machen als ich beschrieben hatte. Ich füge einfach immer Datensätze mit INSERT ein. Das reicht und das muss ja nur immer jede Stunde gemacht werden. Nur jetzt hab ich ein Problem. Wie bekomm ich denn die Zeit raus? Also ich habe 2 Tabellen, die eine muss mit den Daten befüllt werden, die andere liefert mir die Daten. Für die Tabelle, die befüllt werden muss hab ich jetzt mal das:

Code:
INSERT INTO tabelle1 (Requests) SELECT COUNT(*) FROM tabelle2
WHERE tabelle2.TYPE = 'Request'

So, das klappt auch, er macht das was ich will. Nur jetzt das Problem: Wenn in die Tabelle, die mir die Daten liefert, nach einer Stunde wieder neue Daten hinzukommen, soll dieses oben beschriebene INSERT auch nur die Daten der neuen Stunde auswerten. Wie genau mach ich das? Also in der zweiten Tabelle sind Spalten wie DATE und TIME (Format: 2006-08-28 und 12:01:45). Wie formuliere ich das denn? So ungefähr:

Code:
INSERT INTO tabelle1 (Requests) SELECT COUNT(*) FROM tabelle2
WHERE tabelle2.TYPE = 'Request' AND tabelle2.DATE > ... AND 
tabelle2.TIME > ...

Ich hab keine Ahnung was nach denn "..." rein soll. Könnt ihr mir da helfen?
 
Versteh ich das so richtig?

Code:
INSERT INTO alarmmanager.tblamwlan (Requests) SELECT COUNT(*) FROM mydb.test
WHERE mydb.test.TYPE = 'Request' AND CURRENT_DATE() = mydb.test.DATE 
AND EXTRACT(HOUR FROM mydb.test.TIME) = EXTRACT(HOUR FROM TIME())

Das wird bei mir ohne zu murren ausgeführt, aber es wird nichts gemacht! Hab ich da jetzt was falsch verstanden?
 
Buba235 hat gesagt.:
Das wird bei mir ohne zu murren ausgeführt, aber es wird nichts gemacht! Hab ich da jetzt was falsch verstanden?
Echt?! Bei mir kommt das:
Code:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1
Für den Schnipsel
SQL:
select extract(HOUR FROM TIME());
Gruß
 

Neue Beiträge

Zurück