SQL – die neusten Beiträge

Kann ich gleichzeitig einen Wert ändern und auslesen (SQL)?

Ich möchte eine Tabelle erstellen in die verschiedene Werte eingetragen werden sollen. Darunter gibt es eine Spalte mit dem Namen "ID". Diese ID soll immer eins höher als die zuletzt hinzugefügte ID sein. Da IDs aber auch wieder gelöscht werden können, habe ich mir überlegt dass man ein Eintrag erstellt welcher die ID 0 besitzt

Die Tabelle besitzt noch eine zweite Zeile namens "Content". Wenn man jetzt einen neuen Eintrag macht, soll der Content des Eintrages mit der ID 0 um 1 erhöht werden, außerdem soll der neue Eintrag als ID den neuen wert des Contents bekommen:

Tabelle vorher

ID| Content

0 | 10


Tabelle nacher

ID| Content

0 | 11

11| "Ich mag Kekse"

Da dieser Code auch funktionieren soll, wenn viele Leute gleichzeitig neue Einträge erstellen, kommt das UPDATE von mySQL ganz gelegen:

UPDATE table_name SET content =content+1 WHERE ID=0

Hiermit wird schonmal verhindert, dass wenn zwei Leute gleichzeitig einen Eintrag erstellen, die ID nur um 1 erhöht wird.

Jetzt soll aber gleichzeitig der content bei ID=0 ausgelesen werden. Wenn man die anweisungen nacheinander ausliest kann es sein, dass benutzer 1 den wert bekommt der durch benutzer 2 entstanden ist (wenn sie gleichzeitig einen neuen Eintrag machen). (zumindest wenn man nach dem oben genannten code den Content mit SELECT ausließt.)

Wie kann man also mit MySQL in einer Zeile einen Wert ändern und gleichzeitig auslesen? in diesem Fall soll der Content bei ID=0 um eins erhöht werden und gleichzeitig soll der gleiche Content ausgelesen werden. (Dabei ist es egal ob man den Wert von vor der Addition oder den von danach bekommt, da man ja dann noch +1 rechnen kann :D )

SQL, programmieren, MySQL, PHP

MySQL select Abfrage mit spezieller Gruppierung

Hallo Leute,

ich stehe zur Zeit bei einer etwas (für mich) komplexen mySQL bzw. PHP Abfrage. Vielleicht könnt ihr mir einen Schubs in die richtige Richtung geben?!

Ich frage eine Tabelle mit verschiedenen Spalten ab, die auch verschiedene Werte beinhalten, die ich via AVG bzw. SUM berechne. Soweit so gut. In einer Spalte allerdings sind verschiedene Produktnamen die ich gruppieren will, allerdings gruppieren solange ein bestimmtes Zeichen im Produktnamen nicht erreicht ist.

Beispielabfrage:

SELECT COUNT(  `product` ) AS anzahl, AVG(  `aufwand` ) AS aufwand,  `product` FROM  `tabelle` WHERE 1 AND datum BETWEEN "$datumsvariable"  AND "$datumsvariable2'" AND `product` != "" AND  `product` !=  "\"\"" GROUP BY  `product`  ORDER BY  `aufwand`

Soweit so gut... Allerdings gibt es nun eben diese Produktnamen mit Klammern "(", die Details beinhalten die ich nicht als eigene Gruppe will. zB.

  • produktname AB
  • produktname CD
  • produktname CD (details bla bla)
  • produktname CD (details bla bla)
  • produktname AB
  • produktname AB (details bla bla)
  • produktname CD

Meine obige mySQL-Abfrage würde nun 4 Gruppen machen:

  • produktname AB
  • produktname AB (details bla bla)
  • produktname CD
  • produktname CD (details bla bla)

Ich will aber

  • produktname AB
  • produktname CD

Die produktname AB (details bla bla) und produktname CD (details bla bla) sollen enthalten sein in produktname AB bzw. produktname CD

Ich hoffe das war soweit verständlich und ihr könnt mir helfen.

Danke im Voraus, lg DeepX

SQL, programmieren, Datenbank, MySQL, PHP

Datenbank mit Variable aus Python füllen

Hallo,

Ich möchte meine Temperaturmessungen gerne in einer Datenbank speichern. Das ganze System läuft auf einem Raspberry Pi in Python. Wie ich an die Druck und Temperaturdaten hinkomme, weiss ich mittlerweile. Ich habe momentan nur das Problem das bei mir der import von den Zahlen in die Datenbank nicht klappt. Hiereinmal mein Code:

#!/usr/bin/env python
import MySQLdb
db = MySQLdb.connect("localhost", "monitor", "1234", "wetterstation")
curs=db.cursor()
temperature1 = 98    #Momentan meine Variablen, ist später werden dann natürlich die werte aus den Sensoren genommen.
pressure1 = 1001

try:
curs.execute ("INSERT INTO wetterdata values(CURRENT_DATE(), NOW(),  18.2, 18.3)")
db.commit()
print "Data committed"

except:
print "Error: the database is being rolled back"
db.rollback()

So klappt das auch ganz gut, aber sobald ich eben die 18.1 und 18.3 über eine Variable mir rausfische, komme ich zu dem Error.

curs.execute ("INSERT INTO wetterdata (date, time, temperature, pressure) VALUES (CURRENT_DATE(), NOW(), (?), (?))" , (temperature, pressure))

das klappt leider nicht.

So habe ich die Tabelle Created..

CREATE TABLE wetterdata (date DATE, time TIME, temperature NUMERIC, pressure NUMERIC);

Ich bekomme leider auf immer ein error wenn ich die (?) durch %s oder %f oder %d ersetze. Würde mich freuen wenn mir da jemand helfen kann oder mir jemand eine andere Möglichkeit vorzeigt wie man Variablen einfach in eine Datenbank im lokalen Netzwerk bekommt.

Danke, Justin

SQL, Datenbank, Python, Raspberry Pi

Meistgelesene Beiträge zum Thema SQL