php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.02.2012, 22:04  
Benutzer
 
Registriert seit: 07.05.2008
Beiträge: 35
wetteronkel ist in Verruf geraten
Standard Select / left join / update Create Hilfe erbeten

Hallo und schönen guten Abend,

ich habe schon einige kleiner Spielereien mit MySQL angestellt, versuche mich aber heute mal an einem sehr komplexen Thema und wollte Fragen ob Mir jemand ein paar Hilfestellungen geben kann.

Folgende Situation.
2 MySQL Tabellen

Tabelle 1 (namen) besteht aus ID, Vorname,Nachname
Tabelle 2 (ware) besteht aus ID, Artikel,Menge

diese beiden Tabellen habe ich verknüpft mit folgendem Befehl.
PHP-Code:
select 
namen
.IDnamen.Vornamenamen.Nachname
ware.IDware.Artikelware.Menge 
left join namen on ware
.ID namen.ID 
Nun, das Ergenis ist so wie erwartet.
Nun möchte ich aber dieses Ergebnis in eine neue Datenbank kopieren.
Dabei soll aber zwei Bedingungen erfüllt werden.

1. Aus Vorname wird name1, Nachname wird zu name2 und aus Artikel wird ware.
2. falls mehrere Artikel die gleich ID haben sollen die Mengen addiert werden.

Nun wie immer gibt es viele lösungswege.
Mein erster Gedanke war (ist mitsicherheit nicht der schlaueste, denke ich mal) denn ich könnte natürlich nun mit die Datenbank in ein Array einlesen, summieren und simple ordinäre mit Insert in eine neue Datenbank schreiben. Sicher aber (vermute ich mal) gibt es eine eleganteren Weg.. nur, wo finde ich da was und wer kann da etwas mehr zu sagen als, schau mal in's Handbuch. Nicht das ich Lesefaul bin, aber ich gehör nunmal zu den Menschen die man mit der Nase drauf stoßen muss. Daher bitte ich um Hilfe und sag vorab schonmal Danke.

Gruss, Peter
wetteronkel ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.02.2012, 22:34  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 679
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
CREATE TABLE zieldb.zieltable
SELECT
a
.namenID
a.name1
a.name2
a.warenid,
a.ware,
sum(a.Menge) as summenge,
FROM(
select 
namen
.ID as namenID
namen.Vorname as name1
namen.Nachname as name2
ware.ID as warenid
ware.Artikel as ware
ware.Menge 
left join namen on ware
.ID namen.IDa GROUP BY a.warenID 
Harry_X ist offline   Mit Zitat antworten
Alt 02.02.2012, 23:12  
Benutzer
 
Registriert seit: 07.05.2008
Beiträge: 35
wetteronkel ist in Verruf geraten
Standard Hallo Harry,

Vielen Dank für den Denkanstoß, ich werde das jetzt mal in die Praxis umsetzen, analysieren und in meinen Grauen Zellen als neu erlerntes Wissen ablegen. mal sehen wie sich das mit der verarbeitungsgeschwindigkeit verhält, denn im Original habe ich 377 Namen und 17.000 warenartikel wobei die dann noch Datum eingeengt werden.

Danke nochmal und schönen guten Abend.

Gruss, Peter
wetteronkel ist offline   Mit Zitat antworten
Alt 03.02.2012, 13:34  
Benutzer
 
Registriert seit: 07.05.2008
Beiträge: 35
wetteronkel ist in Verruf geraten
Standard klappt noch nicht ganz oder ich zu ....

Hallo, da bin ich wieder und kratz mir am Kopf...

es klappt nämlich nicht so wie "gewünscht" und ich quäle nicht nur meine grauen sondern leider auch eure. Ich bitte dafür schonmal um Entschuldigung.

PHP-Code:
create Table dbase.csvdatei
select
name
.id,
name.Rufname,
name.Name,
name.strasse,
name.ort,
ware.mitgliednr,
ware.datum,
ware.artikelnr,
ware.artikel,
ware.konto,
from reserve
left join name on ware
.mitgliednr name.id Group BY name.id 
das da funktioniert, allerdings mit einem Fehler denn:die Tabelle name sieht so aus:


nach dem Durchlauf wird dabei aber das daraus.


schon etwas merkwürdig.
Er übernimmt NICHT die Struktur in allen Feldern wie aus der Originaltabelle. Dadurch wird z.B. aus Telefon 0431/332 ganz schnell mal 431 obwohl als String im Original.

nun dachte ich, versuchs mal wie MySQL das macht und geb das Format mit an:

also
PHP-Code:
create Table dbase.csvdatei
select
name
.id INT NOT NULL,
name.Rufname TEXT NOT NULL,
name.Name TEXT NOT NULL,
usw
Okay Okay, hört bitte auf zu lachen. das Ergebnis war. Fehlermeldung, falsch, geht nicht

achja, und der zweite "kleine" Fehler...

ich muss genauer erklären.
Ich habe drei Namen in der Tabelle name.
Name 1 kauft 2 Artikel Milch, 3 Brote und 4 Kaugummis.
Name 2 kauft 2 Kaugummis, 2 Brote und 1 Artikel MIlch
Name 3 kauft nur 3 Brote

in der 'ware' Tabelle steht aber immer nur,
1 Brot = 2,50
1 Kaugummi = 0,50
1 Milch = 0,65

(heißt im Umkehrschluss, wenn Name 3 3 Brote kauft sind auch dreimal Brote in der Ware Tabelle)

Jetzt will ich wissen wieviel Umsatz mit jeder Ware jeder einzelne gemacht hat.

Wie gesagt, gelöst ist das Problem auf herkömmliche Weise mit Einlesen in ein Array gruppiert nache Ware,Mitgliednr und neu schreiben Tabelle mit anschliessendem Insert.
Ich dachte nur, das man das evtl eleganter lösen kann.

Für Tipps und anregungen zur Zeit sehr offen

Gruss, Peter

PS. Frage, das mitden Alias.
Das ist doch so eine Sache:
Die kann man machen , muss man aber nicht oder ?
wetteronkel ist offline   Mit Zitat antworten
Alt 03.02.2012, 15:13  
Neuer Benutzer
 
Registriert seit: 06.05.2008
Beiträge: 29
webdino befindet sich auf einem aufstrebenden Ast
Standard

Hallo,
also das ist ja schon ziemlich kompliziert ohne das Datenbankmodell vor sich zu haben.
Hast Du die Datenbank online, so dass man da mal auf die Struktur gucken kann. Aus der Ferne zu sagen was beim übertragen der Daten schief gegangen ist, wird schwer.

Hast Du mal geguckt ob die beiden Tabellen das gleiche Character Set haben (nicht nut die Felder gleich definiert sind) und auch beide myisam oder eben beide innodb sind?

Um Deine ganzen Berechnungen auszuführen musst Du wahrscheinlich verschachtelte SQL Abfragen bauen.
Wenn die Anwendung aber online läuft, kann es sein dass der Provider das nicht zulässt. Da ist es oft gesperrt.
Ich habe manchmal riesengroße SQL Abfragen, die sich in 5 Untersql Abfragen verschachteln, aber damit spart man sich manchmal den PHP Code und je nach Datenbankschnelligkeit gewinnt man Performance. Ich arbeite aber eher mit Oracle.
webdino ist offline   Mit Zitat antworten
Alt 03.02.2012, 16:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.879
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bitte Forenstruktur beachten!

[MOD: Move]
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 04.02.2012, 13:13  
Benutzer
 
Registriert seit: 07.05.2008
Beiträge: 35
wetteronkel ist in Verruf geraten
Standard Verschachtelte SQL Abfragen...

Hallo webdino,
aua... da triffst du mich aber auf einem verkehrten FUß
Verschachtelete SQL ABfragen? hallo, ich bin doch schon froh, das ich mir die Schuhe selbst zubinden kann

Okay, Spass beiseite, beide Tabellen sind gleichen Typs (MyIsam, Latin1_general_ci), das ganze läuft unter Apache hier lokal (noch) und ich werde die Aufgabe erstmal beseite legen.
Es wäre nur eine Vereinfachung und so wie du sagtst eine Einsparung an PHP Code gewesen.

MySQL ist mächtig, keine Frage, aber offensichtlich muss ich mich da mal in einer ruhigen Minute mit beschäftigen.

Danke für deine/eure Antworten.

Gruss Peter
wetteronkel ist offline   Mit Zitat antworten
Alt 04.02.2012, 14:16  
Neuer Benutzer
 
Registriert seit: 06.05.2008
Beiträge: 29
webdino befindet sich auf einem aufstrebenden Ast
Standard

na ja wie Du sagst PHP Code einsparen.
Macht ein SQL zwar manchmal zunächst unübersichtlich, aber bei der Fehlersuche hilft es mir manchmal sehr, wenn ich nicht PHP Code und SQL debuggen muss.

Sind das Daten aus einem Shopsystem, die Du dort ausliest bzw. so eine Art Statistik daraus machen möchtest?

Also ein verschachteltes SQL ist ja z.B. so etwas: (das geht beliebig weit herunter, klar hier hätte ich einfach joinen können, es sollte aber auch nur eine kleine Darstellung sein.

Select Kombi.ID, Kombi.Name, Tabelle1.Anschrift from
(
Select ID, Name from Tabelle where Name like 'Mustermann%'
) Kombi, Tabelle1 where Kombi.ID = Tabelle1.ID
webdino ist offline   Mit Zitat antworten
Alt 04.02.2012, 14:30  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 679
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

JOINS und GROUP BYs bei extrem großen Tabellen mach ich lieber per php-Script, weil -wenn ich so einen JOIN starte, sehe ich ne lange Zeit nichts mehr und kann nicht mal wirklich sehen, was passiert und ob das richtige passiert. Im Extremfall ist dann alles für die Katz.
bei nem Script kann ich den Zwischenstand immer gut in der db per phpmyadmin mitverfolgen und evtl auch so ein Script wieder an der Abbruchstelle wieder aufnehmen.
Harry_X ist offline   Mit Zitat antworten
Alt 05.02.2012, 17:14  
Benutzer
 
Registriert seit: 07.05.2008
Beiträge: 35
wetteronkel ist in Verruf geraten
Standard Statistik.... Join/group

Moinsen,

also vorab die Antwort für WebDino,
ja du hast recht, es wird eine Art Statistik.
Nein, kein Shopsystem, sondern ehe Buchhaltung.
Und der übersichtlichkeit wegen habe ich es natürlich auf die wichtigsten Inhalte reduziert. schliesslich will ich keine fertige Lösung sondern auch dabei was lernen.

Jetzt ein Wort zu Harry_X,
Ja, MySQL ist mächtig und kann ganz schön verwirrend werden und dann ist es manchmal vernünftig genau deinen Weg zu gehen.
sei es um Fehlern auf die Spur zu kommen oder im Fall eines TimeOut's oder abbruchs das ganze neu aufnehmen zu können.

gerade einem Anfänger würde ich auch eher zu diesem Weg raten als sich gleich an den ganz harten Brocken zu versuchen. Dennoch muss/sollte man auch diesen Weg einschlagen. aber zu Verifizieren/und bei der Überprüfeung gemäß: "Was will ich eigentlich" ist manchmal der gradlinige Weg (auch wenn er Mehr Fleißarbeit bedeutet) der bessere.

Nicht alles was ich als Idee im Kopf habe ist auch in der Praxis SO umsetzbar

Gruss, Peter

PS: sorry für evtl. Tipfeher, schau gerade Monster vs Alien
wetteronkel ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] left join Funktioniert mit PHP nicht themonk PHP Einsteiger 13 12.08.2011 12:45
[Erledigt] Umkreissuche in PHP 5.3 geht nicht mehr mmoeckli PHP Einsteiger 8 24.07.2011 23:21
DB Abfrage mit 2 LEFT JOIN und 2 WHERE BEDINGUNGEN - oder einfacher? MeckiDerIgel Datenbanken 4 24.07.2011 18:27
MySQL - LEFT JOIN Query aus mehreren Tabellen ~fransen~ Datenbanken 13 28.01.2011 18:49
[Erledigt] Ergebnise von SELECT mit UPDATE verarbeiten sharp Datenbanken 3 12.01.2011 17:07
Entweder falscher LEFT JOIN oder ein Denkfehler Ruffstaarr PHP Tipps 2009 4 15.12.2009 21:11
[Erledigt] INSERT ... SELECT - nicht alle Spalten aus dem Select benutzen? kip Datenbanken 4 01.09.2009 13:06
JOIN und LEFT JOIN verbinden? Dynamite53 Datenbanken 8 15.05.2009 15:16
Persistence Framework #Avedo Software-Design 37 28.03.2009 17:32
MySQL UNION ALL mit LEFT JOIN? familyman Datenbanken 4 09.10.2008 12:15
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
[gelöst] LEFT JOIN und trotzdem nicht alle Sätze da?!? stefanjann Datenbanken 3 24.10.2006 11:32
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql join befehl, left join zwei bedingungen, mysql umkreissuche verschachtelt

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum