Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Access to Maysql bzw. Empfehlung für ein Programm? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Access to Maysql bzw. Empfehlung für ein Programm?


 
flo
10-03-2007, 10:56 
 
Hallo,

ich wollte ach einer Empfehlung fragen. Bin allerdings kein Exoperte bei Datenbanken.

Ich kann in Access und in mySQl Daten aus Textdatein einlesen.
Diese haben die folgende Form:
ID Autor Titel Quelle

Diese sollen in einer mySQL Datenbankauf dem Server und sollen von mir zu Hause ständig erweitert werden. Da es mehrere 1 - n Beziehungen in den Daten gibt, wollte ich diese wie folgt aufteilen.

(Tabelle1) A-ID Autor
(Tabelle2) T-ID Titel A-ID
(Tabelle3) Q-ID Quelle T-ID A-ID

Mit Access auf meinem Rechner kann ich diese Tabellen problemlos erstellen, da Access eine grafische Benutzerführung hat und ich sonst keine Ahnung hätte, wie ich am besten die Tabelle in diese drei Tabellen aufzuteilen hätte. Hinzu kommt, dass Access bei neuen Daten in der Stammtabelle, die Daten in Tabelle 1,2 und 3 mit dem Ausführen der Abfrage vervollständigt.

Auf dem Server hab ich nun mySQL und kein Access, was auch gut so ist.

Meine Frage ist, wie ich es nun am schlausten anstellen sollte. Gibt es ein Programm für mysql, dass in grafischer Form auch das erledigt, was Access macht oder sollte ich nach einem Access to Mysql Converter suchen, der
die Sachen wieder in ein Textfile schreibt, was ich regelmäßig auf den Server via phpmyadmin hochladen kann?

Was könnt ihr empfehlen?

 
ministry
10-03-2007, 11:36 
 
Du wirst ja wohl drei Tabellen mit PHPMyadmin anlegen können? Oder was möchtest du machen?

 
flo
10-03-2007, 12:06 
 
Ich möchte in die Tabellen ständig schubweise neue Daten einpflegen.
Access besitzt dabei einen Automatismus, dass man die bestehenden Tabellen mit den bereits erstellten Abfragen erweitert.

 
ministry
10-03-2007, 12:25 
 
Dann musst du ein PHP-Skript schreiben, welches die Daten von irgendwo einliest und in die Datenbank schreibt.
Automatisieren kannst du das dann mit einem Cronjob.
Eine Oberfläche, in der man das zusammenklicken kann, wirst du nicht finden.

 
flo
10-03-2007, 12:37 
 
Schade, hab gehfft, dass so etwas existiert.

schönen Gruß
flo

 
flo
10-03-2007, 14:40 
 
Jetzt habe ich versucht die Sachen direkt mit
Query in die Tabellen zu verschieben, die erste Abfrage ging,
die zweite hängt sich auf meinem rechner auf, kann ich das auch häppchenweise irgendwie ausführen?

INSERT INTO autoren ( autor )
SELECT DISTINCT db.autor
FROM db
ORDER BY db.autor DESC;

INSERT INTO titelliste ( titel, aid )
SELECT db.titel, autoren.aid
FROM autoren INNER JOIN db ON autoren.autor = db.autor
ORDER BY db.titel;


Ich hab jetzt in der Originaltabelle gut ne Million Einträge. Aus diesen
habe ich jetzt in der Tabelle autoren den Namen und eine automatische aid zugewiesen.
Im nächsten Schritt wollte ich nun in die Tabelle titelliste den Titel und die zugehörige aid plus eine automatische tid einfügen.

Habe ich was falsch gemacht? Oder wie kann ich das häppchenweise einfügen bzw. die Tabellen updaten so dass die bereits existenten Einträge nicht überschrieben werden?

Gruß
flo

 
ministry
10-03-2007, 14:48 
 
Kannst du bitte mal erklären, was du genau machen willst.
Zuerst wolltest du irgendetwas automatisches mit einem Textfile machen. Und nun? Was für eine Million Einträge, und was soll damit passieren?

Queries hängen sich übrigens normalerweise nicht auf, sondern geben eine Fehlermeldung aus... die erfährst du mit mysql_error(), und es wäre nett, wenn du die dazu posten würdes.

... INNER JOIN db ON autoren.aid = db.autor versuch das mal

 
flo
10-03-2007, 15:19 
 
Hallo,

ich möchte halt das, was ich schon mit access gemacht habe auf mysql übertragen, weil ich diese Datenbank auf dem Server zur Verfügung habe.

Ausgangspunkt ist die Tabelle db
Diese möchte ich zum einem auf 3 Tabellen runterbrechen, da die
Nutzung von diesen zu performanteren Abfragen führen soll.

Zuerst soll jemand nach dem Autor suchen, dann nach dem Titel und dann sollen ihm alle Quellen angezeigt werden ...

in der Spalte autor ist tatsächlich der Name des Autors vorhanden. Während aid ein Primärschlüssel der Tabelle autoren ist. Deswegen kann ich die beiden nicht gleichsetzen.

Hab das ganze mit nem Pentium Centrino 1,4 GHz und 500 MB Ram 10 Minuten laufen lassen, es ist blos nichts passiert. Alle anderen Programme habe ich beendet, weil beim ersten Versuch ich diese nicht mehr schliessen konnte.

Mysql läuft bei mir auf Windows XP mit phptriad. Weiß nicht, ob es an der Umgebung liegt...

 
ministry
10-03-2007, 15:30 
 
Jetzt versteh ich langsam, worum es geht.

Werden denn überhaupt Einträge in der titellisten-Tabelle gemacht?

Wo führst du die Query aus, in PMA?

Du kannst auf jeden Fall ORDER BY weglassen. In welcher Reihenfolge der Kram da drinsteht ist egal, das sortiert man beim Abfragen.
Aber das wird wohl nicht soviel bringen.

Dann kannst du noch den Spalten db.autor und autor.autor (da steht beidesmal der Name drin, wenn ich das richtig verstanden habe) einen index geben, dann müsste der Join darüber schneller werden.
Kannst du nach dieser Umbauaktion ja wieder entfernen.

Und falls das alles nix hilft, könntest du erstmal alle Titel ohne die autorenid in die Tabelle einfügen, dann mit PHP alle Autoren inkl. ID in ein array lesen und so stückweise die autorenid in die Titeltabelle schreiben.... irgendwie so.

 
flo
10-03-2007, 15:56 
 
Hallo ministry,

ich hab es mit PMA ausgeführt.

In der Haupttabelle habe ich den autor als index gesetzt.
Dann das ganze ohne "order by" ausgeführt.

Die Autor-ID wurde auch richtig zugeordnet, allerdings gibt es die Titel mehrmals. Muss ich evtl. in der Tabelle titelliste den Indes auch auf titel setzen, damit die Einträge nicht doppelt dahinkommen? oder muss ans Ende evtl. Group by db.titel?

Gruß
flo

 
ministry
10-03-2007, 16:06 
 
Original geschrieben von flo
Hallo ministry,

ich hab es mit PMA ausgeführt.

In der Haupttabelle habe ich den autor als index gesetzt.
Dann das ganze ohne "order by" ausgeführt.

Die Autor-ID wurde auch richtig zugeordnet, allerdings gibt es die Titel mehrmals.
Also hat es jetzt geklappt?

Muss ich evtl. in der Tabelle titelliste den Indes auch auf titel setzen, damit die Einträge nicht doppelt dahinkommen? oder muss ans Ende evtl. Group by db.titel?

Gruß
flo Mit dem Index hat das nichts zu tun, versuch mal DISTINCT beim Select. Wieso stehen die Titel denn mehrfach in db drin?

 
flo
10-03-2007, 18:46 
 
Es sind jeweils 1-n beziehungen.
Die daten sind halt aus verschiedenen Quellen.
Ein Autor hat mehrere Bücher-Titel
Ein Büchertitel kann auf mehreren Seiten eingesehen werden.
Bsp:
Goethe Faust www.faust.de
Goethe Faust www.goethe.de
Goethe Werther www.faust.de
Zum x-ten Mal: Ihr Pfeiffen sollt nicht ständig Domains vollkommen aus dem Bezug verlinken, die euch nicht gehören! Siehe Regeln.
wahsaga
Jetzt habe ich aber noch ein Problem. Bei manchen Einträgen
ist vor dem ersten Zeichen ein Leerzeichen, bevor ich weiter mache,
würde ich dies gern entfernen.

Mit mysql könnte es so gehen:

UPDATE test SET text = REPLACE(text, ' ', '');

Problem: Es werden alle Leerzeichen ersetzt. Ich möchte aber, dass nur das erste Zeichen Links durchsucht wird, also wenn der Begriff mit einem Leerzeichen beginnt, dann soll dieses ersetzt werden.

Vielen Dank für die Hilfe
flo

 
ministry
10-03-2007, 18:49 
 
Dann machs mit Trim (http://dev.mysql.com/doc/refman/5.1/de/string-functions.html)

 
flo
10-03-2007, 18:57 
 
Vielen Dank

hab es wie folgt gemacht:
UPDATE test SET text = TRIM(text);

 
flo
22-03-2007, 17:38 
 
Jetzt bräuchte ich nochmal Hilfe, hab hier und dort gelesen aber irgendwie funktioniert meine Lösung nicht.

Ich habe der ersten Tabelle ein Feld Anzahl hinzugefügt.
Nun möchte ich aus der Zweiten Tabelle zählen, wieviele Titel
es von dem Autor gibt und diese in die Spalte Anzahl der ersten Tabelle reinschreiben. So wie ich es gedacht habe, so funktioniert es offensichtlich nicht. Kann mir da jemand evtl. helfen. Hier ist mein Versuch:

UPDATE autor SET Anzahl = zahl
WHERE autor.aid IN
(SELECT Count(*) as zahl FROM titelliste
WHERE INNER JOIN titelliste ON autor.aid = titelliste.aid)

Dieser Versuch funktioniert auch icht ;(

UPDATE autor SET anzahl = (SELECT Count(*) FROM titelliste
WHERE INNER JOIN titelliste ON autor.aid = titelliste.aid)
WHERE INNER JOIN titelliste ON autor.aid = titelliste.aid;


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