php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-01-2009, 23:04
BoFiaZ
 Registrierter Benutzer
Links : Onlinestatus : BoFiaZ ist offline
Registriert seit: Aug 2007
Beiträge: 72
BoFiaZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard Tabelle für Sequence

Hi,

gibt es beim Anlegen einer Tabelle, speziell für den Wert einer Sequence was besonderes zu beachten? Ich habe bisher immer einen Int-Feld mit der Länge 11 genommen und auf das Feld einen Primärschlüssel gelegt. Das Erzeugen einer neuen Sequence mittels MDB2 von Pear funktioniere auch immer problemlos, da hat er ja auch die Tabelle selbst angelegt. Aber ich habe nun eine Anwendung die Zend_Db_Table anwendet und da habe ich ebenfalls die Sequence-Tabelle zum Erzeugen einer ID angegeben, jedoch generiert er keine neue ID.

Kann das an der Tabellenstruktur liegen?
Mit Zitat antworten
  #2 (permalink)  
Alt 13-01-2009, 23:39
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wenn du mit "Sequenz" sowas wie den Autoincrement bei MySQL meinst, dann JA!
Da alle "brauchbaren" DBMS das Konzept beherrschen, wird der Fehler in der Tabellendefinition liegen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #3 (permalink)  
Alt 14-01-2009, 00:33
BoFiaZ
 Registrierter Benutzer
Links : Onlinestatus : BoFiaZ ist offline
Registriert seit: Aug 2007
Beiträge: 72
BoFiaZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Tabelle habe ich korrekt angelegt, aber es wird einfach keine Sequence erzeugt. Ist vielleicht an meinem Code etwas falsch?

PHP-Code:
require_once 'Zend/Db/Table.php';

class 
kunde extends Zend_Db_Table {
    protected 
$_name             'adressen';
    protected 
$_schema         'example';
    protected 
$_primary     'AdressID';
    protected 
$_sequence    'adressen_seq';
}

$options = array(
  
'host'     => 'mysql5.test.de',
  
'username' => 'example',
  
'password' => 'example',
  
'dbname'   => 'example'
);

$db Zend_Db::factory('Pdo_Mysql'$options);

$tbl = new kunde($db);
$tbl->insert(array('name' => 'Example')); 
Mit Zitat antworten
  #4 (permalink)  
Alt 14-01-2009, 08:49
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

MySQL kennt keine Sequenz als einzelnes Objekt, wie man das vielleicht von PostgreSQL kennt, sondern eine Spalte besitzt das Attribut auto_increment. Wenn dies bei dir nicht der Fall ist, hast du den Fehler ja schon gefunden. Poste doch mal das SQL-Skript, mit dem du die Tabelle erstellst.
Mit Zitat antworten
  #5 (permalink)  
Alt 14-01-2009, 09:36
BoFiaZ
 Registrierter Benutzer
Links : Onlinestatus : BoFiaZ ist offline
Registriert seit: Aug 2007
Beiträge: 72
BoFiaZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

hier das Script:
PHP-Code:
--
-- 
Tabellenstruktur für Tabelle `kunde_seq`
--

CREATE TABLE IF NOT EXISTS `kunde_seq` (
  `
intint(11unsigned NOT NULL auto_increment,
  
PRIMARY KEY  (`int`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=;

--
-- 
Daten für Tabelle `kunde_seq`
--

INSERT INTO `kunde_seq` (`int`) VALUES
(1); 
Mit Zitat antworten
  #6 (permalink)  
Alt 14-01-2009, 10:14
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Nein, ich meine deine adressen-Tabelle. Du benötigst in MySQL keine Extratabelle für die Sequenz. Du kannst in der einfachsten Form bereits dem Primärschlüssel AdressID das auto_increment-Attribut geben.
Mit Zitat antworten
  #7 (permalink)  
Alt 14-01-2009, 10:49
BoFiaZ
 Registrierter Benutzer
Links : Onlinestatus : BoFiaZ ist offline
Registriert seit: Aug 2007
Beiträge: 72
BoFiaZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich will aber bereits vor dem Insert wissen welche ID dem Datensatz zu geordnet wird. Und das ist nur möglich wenn ich eine Sequenz verwende. Und meines Wissens steht eine korrekte Sequenz immer in einer separaten Tabelle (kann mich aber auch irren, jedoch benötige ich eine extra Tabelle dafür). Bei MDB2 geht das ohne Probleme mit $db->nextid('tabellenname'); warum will das bei Zend_Db_Table nicht funzen... dachte mir das es unter Umständen an der Art der Tabelle liegt, aber offensichtlich ist es eine besondere Art und Weise von Zend...
Mit Zitat antworten
  #8 (permalink)  
Alt 14-01-2009, 11:22
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Wieso willst du das wissen? Wenn der Datensatz eingefügt wurde, kommst du an die zuletzt generierte ID. Das ist auch der übliche Weg. MDB2 wird mit ziemlicher Sicherheit den Wert MAX(sequence)+1 als nächste ID ermitteln, was im Falle von Race Conditions aber großer Blödsinn ist. Afaik hast du da keine andere Möglichkeit.
Wozu benötigst du für die IDs denn eine Extratabelle?
Mit Zitat antworten
  #9 (permalink)  
Alt 14-01-2009, 11:33
Cologne
 Newbie
Links : Onlinestatus : Cologne ist offline
Registriert seit: Jan 2009
Ort: Köln
Beiträge: 28
Cologne ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du hast deine Frage ja schon beantwortet bekommen. Sowohl hier im Forum wie auch hier und wer weiß in wieviel anderen Cross-Postings.

MySQL unterstützt keine Sequenzen.
Zend bietet die Routinen dafür an, weil das Zend-Framework mit vielen anderen Datenbanken (die teilweise auch Sequenzen unterstützen) genutzt werden kann.
Da du dich für MySQL entschieden hast, stehen dir die Sequenzen NICHT zur Verfügung.
Du müsstest also eine andere Datenbank nehmen oder konsequent mit auto_increment arbeiten.
Oder du erweiterst deine Zend_db_table um eine Funktion, die vielleicht eine Sequenz "simuliert".
Vielleicht reicht es ja auch schon, die max(id) aus der Spalte des auto_increments auszulesen.
Sequenzen stehen dir jedenfalls, auch trotz Zend, in MySQL nicht zur Verfügung.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:10 Uhr.