SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 14.04.2010, 00:26:50
zorkez zorkez ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 5
Problem: selbst referenzieren

Hallo,

angenommen ich habe eine Tabelle Container in der sich 2 Spalten befinden:
  • container_id INT PRIMARY KEY auto_increment
  • kind_von INT referenziert container_id

Mein Ziel ist, dass ich eine Tabelle habe, mit der ich die Container beliebig schachteln kann. Die Container sollen später mal dazu dienen gewisse Module zu gruppieren.

Ich habe jetzt folgendes Problem:

Wenn ich einen neuen Container anlege, kommt es zu einem Fehler, da ich kind_von angeben muss, die container_id allerdings noch nicht bekannt ist.

Das ganze funktioniert natürlich, wenn bereits ein Container angelegt wurde.
Allerdings wenn es der Erste ist, fehlt mir die Information der container_id, die ja erst per auto_increment vergeben wird.

Wie kann man da vorgehen? Bin hier noch nen Frischling was das angeht. Vielleicht gibts ja auch nen anderen Ansatz?!

Danke im Voraus
Mit Zitat antworten
  #2  
Alt 14.04.2010, 04:51:25
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Problem selbst Referenzieren

Du kannst einen default Wert festlegen. Da später auto_increment Werte in diese Spalte gehören würde sich die 0 (nicht NULL) anbieten.
Mit Zitat antworten
  #3  
Alt 14.04.2010, 07:56:50
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Problem: selbst referenzieren

Hi

Zitat:
Zitat von zorkez Beitrag anzeigen
Mein Ziel ist, dass ich eine Tabelle habe, mit der ich die Container beliebig schachteln kann. Die Container sollen später mal dazu dienen gewisse Module zu gruppieren.
Könntest du dazu mal 3-? Test datensätze zeigen. Auch wenn du es
gut erklärt hast, habe ich es nicht so ganz verstanden glaub ich ;)

container_id | kind_von
1| 1
2| 1
3| 2

etwa so?

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #4  
Alt 14.04.2010, 09:53:52
zorkez zorkez ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 5
AW: Problem selbst Referenzieren

Ja, die Einträge stimmen so.
So soll es letzten Endes einmal aussehen.

Es gibt nur ein Problem beim Anlegen des Datensatzes:

4 | 4

Der Datensatz müsste sich ja selbst referenzieren, da er in diesem Fall kein Kind von einem anderen Container werden soll.

Ein Default-Wert bedeutet ja, dass der Container ein Kind von irgendeinem anderen Container ist (z.B. 1).
Der Default-Wert 0 ist ja nicht erlaubt, da keine container_id 0 verfügbar ist.

Ich dachte das es soetwas wie nextVal gibt, der den Wert der nächsten container_id einträgt.

Alternativ könnte ich das natürlich auch in 2 Schritten lösen. Erst anlegen und dann abändern. D.h. aber auch, dass ich das für alle Softwarelösungen so implementieren muss. Das will ich eigentlich vermeiden.

Wie gesagt. Vielleicht ist ja auch mein Vorgehen falsch. Bin für Hinweise dankbar.
Mit Zitat antworten
  #5  
Alt 14.04.2010, 10:12:52
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Problem selbst Referenzieren

Hi

Zitat:
Der Default-Wert 0 ist ja nicht erlaubt, da keine container_id 0 verfügbar ist.
Was ja bei anlegen der DB kein problem wäre einen container 0 an zu legen. Üblich bei

Nun mir erschliesst sich halt auch nicht der Sinn deiner Referenzierung.
Zitat:
Die Container sollen später mal dazu dienen gewisse Module zu gruppieren
Deswegen kann ich dir leider auch nicht einen anderen weg anbieten.
Vielleicht erklärst du grob was du damit erreichen willst.

Zitat:
Erst anlegen und dann abändern. D.h. aber auch, dass ich das für alle Softwarelösungen so implementieren muss. Das will ich eigentlich vermeiden.
Mit einer funktion sollte das aber kein problem sein.

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #6  
Alt 14.04.2010, 11:06:52
zorkez zorkez ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 5
AW: Problem selbst Referenzieren

Hi, danke für die Antworten.

Also ich will z.B. meinen Kollegen eine Seite selbst erstellen lassen. Module dafür sind schon vorhanden.
Aus designtechnischen Gründen will ich Container einsetzen, um Module zu gruppieren, weil dieses Vorgehen die Positionierung erleichtert.

Also so sieht die DB zwar nicht aus, aber grob beschrieben so:

uri varchar(255)
container_id int primary key...
kind_von int

Ein Container wird also einer bestimmten Seite zugewiesen.

Lege ich jetzt wie eben schon beschrieben einen Container mit dem Wert 0 an (sozusagen als "root" oder "Startknoten") und geben bei dem neuen Eintrag in child_of = 0 an, dann ist ja dieser angelegte Container ein Kind von 0 mit der uri "xxx".

Jeder Container muss einer uri zugewiesen werden.

Mir fällt gerade ein, dass ich auch die uri auf "" (also leer) setzen kann... aber sauber ist das dann auch nicht...
Ich denke mal darauf rum.

Eine Funktion um das Problem zu lösen kommt hier nicht in Frage, da dass den schlechten Datenbankstil noch unterstreicht.

Edit:

Das mit dem leeren uri-Feld wird nicht funktionieren, da es sich hier auch um einen Fremdschlüssel handelt.

Geändert von zorkez (14.04.2010 um 11:23:18 Uhr)
Mit Zitat antworten
  #7  
Alt 14.04.2010, 14:09:22
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Problem selbst Referenzieren

Hi

Zitat:
Module dafür sind schon vorhanden.
Aus designtechnischen Gründen will ich Container einsetzen, um Module zu gruppieren, weil dieses Vorgehen die Positionierung erleichtert.
Erstmal gut...macht joomla ja auch so ;)
Nur warum musst du um Module (was auch immer du darunter verstehst
oder meinst) per Fremdschlüssel gruppieren?

Ich denke ohne weitreichende Infos um deinen geplanten Aufbau kann
dir hier keiner helfen das zu verbessern.

Aber zu deiner eingangsfrage soweit ich weis ist eine Referenz nur
auf eine andere Tabelle sinnvoll und gestattet.
Les dich hier weiter schlau ;)

mfg

Ckaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #8  
Alt 14.04.2010, 19:02:06
zorkez zorkez ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 5
AW: Problem selbst Referenzieren

Gutgut. Ich werde mich mal in Joomla einlesen und das ggf. so einbauen.

Zitat:
Aber zu deiner eingangsfrage soweit ich weis ist eine Referenz nur
auf eine andere Tabelle sinnvoll und gestattet.
Also ich hab das Konzept mit MySQL Workbench gemacht. Wenn das nicht erlaubt wäre, wäre es glaube ich nicht im Programm möglich.

Ich melde mich nochmal wenn ich was gefunden habe...
Mit Zitat antworten
  #9  
Alt 14.04.2010, 22:33:56
zorkez zorkez ist offline
Anfänger
 
Registriert seit: Apr 2010
Alter: 36
Beiträge: 5
Also eine nextval Funktion wie in Oracle scheint es in MySQL nicht zu geben.

Die Lösungen eine Navigation in einer Baumstruktur in der DB zu realisieren ist meinem Vorhaben ja sehr ähnlich.
Dort arbeiten die Leute in diesem Forum auch mit parent- oder child - Feldern.
Allerdings setzen die Leute keine Referenz.
Dieses Vorgehen gefährdet aber die Integrität.
D.h. doch, dass wenn ich den Primary Key ändere, müsste ich alle Kind-Einträge auch ändern... sehr unschön.

Scheint also in MySQL nur die Möglichkeit zu geben: Erst einfügen und dann ändern....

Oder?

Edit:

Das Problem dürfte mehr oder weniger über last_insert_id() zu realisieren sein. Damit ist das geklärt.

Bis dann

Geändert von zorkez (14.04.2010 um 22:49:58 Uhr)
Mit Zitat antworten
Antwort


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

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit MySQL in Typo3-CMS yamukud MySQLi/PDO/(MySQL) 0 09.10.2009 13:21:18
Subquery Problem (Verständnis?) newgame MySQLi/PDO/(MySQL) 1 29.05.2009 22:01:27
Upload von Fotos, die in eine DB eingetragen werden sollen. Problem 2 jf-flasher PHP Grundlagen 2 01.02.2009 17:20:41
Problem mit Lokalisierung eines SESSION - Problems Fabian85 PHP für Fortgeschrittene und Experten 5 03.10.2005 20:17:54
mysql und php problem schmidt PHP für Fortgeschrittene und Experten 9 31.10.2003 18:05:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:36:07 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt