db_query/db_insert richtig nutzen
am 12.10.2014 - 17:22 Uhr in
Hallo Forum,
mit der Schema API habe ich eigene Tabellen im Drupal-Context erzeugt. Nun möchte ich diese richtig füllen, doch wie nutze ich in dem Zusammenhang db_query bzw. db_insert.
Meine tabelle schaut so aus und ist losgelöst von jedem node:
timestamp,anzahl
Nun möchte ich gerne die Werte in diese Tabelle füllen, weiß jedoch nicht wie ich das anstellen soll, da es sich um keinen Node handelt.
Vielen Dank für eure Hilfe.
- Anmelden oder Registrieren um Kommentare zu schreiben

Kannst Du vielleicht mal den
am 12.10.2014 - 23:31 Uhr
Kannst Du vielleicht mal den Code des Moduls posten, dann können wir Dir gleich die richtigen Antworten dazu geben?
Hi,natürlich kann ich meinen
am 13.10.2014 - 09:09 Uhr
Hi,
natürlich kann ich meinen Code posten, wobei ich aktuell nicht wirklich stolz drauf bin, der ist so 'dirty'.
<?php
$input = array();
foreach ($data['list'] as $weatherelement)
{
unset($input);
$input['timestamp'] = 'to_timestamp('.$weatherelement['dt'].')';
if(isset($weatherelement['main']['temp']))
{
$input['temp'] = $weatherelement['main']['temp'];
}
if(isset($weatherelement['main']['humidity']))
{
$input['humidity'] = $weatherelement['main']['humidity'];
}
if(isset($weatherelement['rain']['3h']))
{
$input['rain'] = $weatherelement['rain']['3h'];
}
if(isset($weatherelement['snow']['3h']))
{
$input['snow'] = $weatherelement['snow']['3h'];
}
if(isset($weatherelement['main']['pressure']))
{
$input['pressure'] = $weatherelement['main']['pressure'];
}
if(isset($weatherelement['wind']['speed']))
{
$input['windspeed'] = $weatherelement['wind']['speed'];
}
if(isset($weatherelement['wind']['deg']))
{
$input['winddirection'] = $weatherelement['wind']['deg'];
}
//var_dump($input);
$keys = '';
$values = '';
foreach ($input as $key => $value)
{
$keys = $keys.','.$key;
$values = $values.','.$value;
}
db_query('INSERT INTO '.$tablename.'('.substr($keys,1).') VALUES ('.substr($values,1).');');
}
?>
Vielleicht vorne weg, was ich mache, ich parse Daten einer Wetterstation und überführe Sie in eine extra Tabelle (also kein Node oder anderes Drupalelement, ein anderes Drupalmodul greift auf diese Tabellen zu und stellt dann Ergebnisse in Nodes bereit).
Ich vermute, das hier noch jede Menge Optimierungspotential vorhanden ist, zum einen wird dieses Insert leider nur bei Postgres klappen, zum zweiten wird in jeder Schleife das db_query ausgeführt, eine Art Bulk wäre vermutlich geeigneter. Hier kenne ich mich auf Seiten von Drupal leider noch nicht gut genug aus.
mit bestem Gruß
Jenne
Du kannst auch Daten
am 13.10.2014 - 10:49 Uhr
Du kannst auch Daten folgendermaßen speichern:
<?php
$data = array(
'title' => 'Test 1',
'description'=> 'Description 1',
);
drupal_write_record('TABLE', $data);
?>
Wichtig ist hier bei, dass die Tabelle über die module.install angelegt wurde, damit sie dem Schema bekannt ist. Dann musst Du Dir bzgl. db_insert() oder db_query() keine Gedanken machen. "title" und "description" sind hierbei die Spaltennamen in der Tabelle, also ein einfaches key => value Paar.
Hi, das werde ich gleich mal
am 13.10.2014 - 13:32 Uhr
Hi, das werde ich gleich mal testen, meine Tabelle wir leider zur Laufzeit von Drupal installiert, sprich es kommen während der Nutzung zusätzlich Tabellen hinzu. Schön wäre jetzt noch ein Bulk Insert. Das kriege ich aber auch noch irgendwie hin.
Ähm Andreas, wir sollten es
am 13.10.2014 - 17:47 Uhr
Ähm Andreas, wir sollten es besser absprechen wer wann unseren INet-PC nutzen darf. beste Grüße Jens.