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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
16.01.2015, 16:03:49
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Zählen von ";" in einer Zelle
Zitat:
Zitat von pguser
Geh zurück auf #2.
|
Direkt oder über Los?
Das hatte ich ja leider nicht wirklich verstanden...
edit:
@Unglückliche DB Struktur!
Kann ich ja leider nicht ändern.
@Tipp:
@"Die 5 Normalformen" ausdrucken und unters Kopfkissen legen.
Sagt mir, dass es falsch ist und ich hätte es so machen sollen: http://de.wikipedia.org/wiki/Normali...28Datenbank%29
@Tipp2:
@Autoren und Bücher stehen in einer n:m Relation
Macht auch Sinn, aber ich weiß gar nicht wie ich von meinem Problem zu der nXm Lösung kommen kann
|
16.01.2015, 16:41:01
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: Zählen von ";" in einer Zelle
Tabelle "Bücher" -> id, Titel ....
Tabelle "Autoren" -> id, Name ....
Tabelle "Bücher_Autoren" Kreuztabelle -> id, BücherID, AutorID
So kannst du bequem jedem Autor beliebig viele Bücher zuordnen, Jedem Buch beliebig viele Autoren.
Und alles zählen.
|
16.01.2015, 16:53:50
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Zählen von ";" in einer Zelle
@DokuLeseHemmung:
Danke,
genauso hättest ich es auch gemacht, wenn ich die Tabelle erstellt hätte.
Wie kann ich dann aber aus 'Schultz, B.; Meiner, A.; Berner, G.'
AutorID1
AutorID2
AutorID3
machen.
|
16.01.2015, 17:03:30
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: Zählen von ";" in einer Zelle
Verstehe ich nicht.....
"Bücher"
id, Titel ....
1, Die roten Rosen
2, Gretel und das Hänschen
"Autoren" -
id, Name ....
1,willi
2,Heinrich
3,karl
Kreuztabelle
id, BücherID, AutorID
1,1,2
2,1,3
3,2,1
4,2,3
|
19.01.2015, 12:13:11
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Zählen von ";" in einer Zelle
Hey,
danke für die Antwort, aber ich weiß halt nicht wie ich das technisch mache.
Ich weiß nicht wie in die Zuordnung erstelle.
Ich habe ja :
"Buch 1" | "Heinz; Karl; Willi" und ich weiß nicht mit welchen mysql Befehlen ich daraus
"Buch 1" | "AutorID1=Heinz"
"Buch 1" | "AutorID2=Karl"
"Buch 1" | "AutorID3=Willi"
mache.Also die Kreuztabelle erstelle.
Ich muss doch irgendwie den ersten Teil(Heinz) der Strings ("Heinz; Karl; Willi") dem Buch1 zuordnen (Join/Union/oder sowas) und dann den zweiten Teil (Karl) etc.
VG
|
19.01.2015, 12:35:41
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: Zählen von ";" in einer Zelle
Ich weiß auch nicht, was du da in SQL nehmen könntest.....
Deswegen ist deine ursprüngliche Struktur ja so bescheiden, so schlecht, weil SQL eben damit nur ganz ganz schlecht umgehen kann.... eigentlich gar nicht.
Das war ja schon dein Problem beim zählen.
Alternative:
Ich würde ein PHP Script drüber rodeln lassen....
|
19.01.2015, 15:26:56
|
|
Anfänger
|
|
Registriert seit: Dec 2014
Alter: 35
Beiträge: 20
|
|
AW: Zählen von ";" in einer Zelle
Hallo kidchino,
ich hab mir mal die Arbeit gemacht es über PHPmyadmin (mySQL) duchzugehen...
Ich benutze noch den selben Lösungsansatz den ich schon beschrieben habe.
Zieltabelle: IDzwischen | Autor1 | Autor2 | Autor3 | Autor4
(ID generell wäre auch nicht schlecht gewesen hab ich erst im nachhinein bedacht [also eine spalte mehr mit autoincrement])
Code:
#insert into zwischentabelle
SELECT IDstart AS IDzwischen,
substring_index(substring_index(autoren,';',1),';',-1) AS Autor1,
substring_index(substring_index(autoren,';',2),';',-1) AS Autor2,
substring_index(substring_index(autoren,';',3),';',-1) AS Autor3,
substring_index(substring_index(autoren,';',4),';',-1) AS Autor4
FROM erstetabelle
where substring_index(substring_index(autoren,';',3),';',-1) != substring_index(substring_index(autoren,';',4),';',-1)
Hier erstellt man eine Tabelle die die Autoren in einzelne Spalten aufnehmen kann…
Jetzt löscht man den Inhalt wenn der Import in die andere Tabelle funktioniert hat…
Code:
update erstetabelle SET autoren = ''
where substring_index(substring_index(autoren,';',3),';',-1) != substring_index(substring_index(autoren,';',4),';',-1)
ab jetzt von vorn aber so:
Code:
insert into zwischentabelle
SELECT IDstart AS IDzwischen,
substring_index(substring_index(autoren,';',1),';',-1) AS Autor1,
substring_index(substring_index(autoren,';',2),';',-1) AS Autor2,
substring_index(substring_index(autoren,';',3),';',-1) AS Autor3,
null AS Autor4
FROM erstetabelle
where substring_index(substring_index(autoren,';',2),';',-1) != substring_index(substring_index(autoren,';',3),';',-1)
für einen einzelnen Autoren müsste die anfrage für das inportieren so aussehen:
Code:
SELECT IDstart AS IDzwischen,
substring_index(substring_index(autoren,';',1),';',-1) AS Autor1,
null AS Autor2,
null AS Autor3,
null AS Autor4
FROM erstetabelle
where autoren != ''
____________________________________________________________
Speichern in die Autorentabelle:
Code:
#insert into autoren (autor)
SELECT autor4
FROM zwischentabelle
WHERE autor4 != ''
group by autor4
Ab dem zweiten einfügen muss man aufpassen das man Autoren nicht doppelt einfügt.
Code:
#insert into autoren (autor)
SELECT autor3
FROM zwischentabelle
WHERE autor3 != ''
and autor3 not in (select autor from autoren)
group by autor3
und so weiter …
Damit lässt sich in der Zwischentabelle die Beziehung bewahren und du bekommst deine ursprungstabelle in eine Buchtiteltabelle
ID | Buch
und eine Autorentabelle
ID | Autor
Deine Aufgabe ist es noch die Beziehungstabelle zu erstellen. An dem Punkt habe ich
aufgehört darüber nachzudenken bin ja Hilfbereit aber kein 1zu1 Support.
Randinformationen:
- Tabellen in die du Inportieren möchtest musst du davor anlegen.
- Mach davor eine Sicherheitskopie indem du deine Datenbank exportierts (falls was schief geht)
- Lass immer das INSERT INTO am anfang weg oder als Kommentar damit du erstmal sehen kannst, ob die Anfrage funktioniert.
hoffe dieser Beitrag ist hilfreich.
Lg BozzaCoon
|
19.01.2015, 18:00:51
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Zählen von ";" in einer Zelle
Hey BozzaCoon,
vielen Dank für die große Mühe. Ich werde es nachher gleich mal probieren.
Leider verstehe ich vom Sinn her nicht alles.
Ich glaube mein Problem ist immer noch, dass ich Bücher mit über 1200 Autoren habe.
Das ist doch ein Problem oder?#
LG und vielen Dank!!!!
|
19.01.2015, 20:18:26
|
|
Anfänger
|
|
Registriert seit: Dec 2014
Alter: 35
Beiträge: 20
|
|
AW: Zählen von ";" in einer Zelle
Du hast ernsthaft Bücher in deiner Datenbank in der 1200 Autoren nacheinander aufgelistet sind?
Dann ist die Datenbank auf jedenfall "korrupt" und ist komplett wertlos...
Ich mein ... kann man nachvollziehen das an dem Buch wirklich so viele Autoren tätig waren?
Habe ich da eine Bildungslücke das es Bücher genre gibt wo so viele Autoren normal sind?
Ich komm darauf grade nicht klar... aber wenn 1200 Autoren eingetragen sind... und das nicht gewollt ist...
und du nicht weißt welche Einträge stimmen... kannst du die Datenbank vergessen...
oder ich versteh dein problem einfach nicht...
tut mir leid...
lg BozzaCoon
|
19.01.2015, 21:16:20
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Zählen von ";" in einer Zelle
Hi,
ich hatte Bücher und Autor verwendet, da das ein sehr gängiges Bsp ist.
Eigentlich sind es keine Bücher sondern wissenschaftliche Artikel. Und leider ja, dort gibt es einen Artikel der hat 1268 Autoren. Insgesamt ist die Größenordnung zwar so:
1-500 Autoren (95%)
501-1268 Autoren (5%)
aber trotzdem gibt es viele mit mehr als 500 Autoren.
Das ist mein Problem :(
LG
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:11:04 Uhr.
|