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 19-07-2008, 11:49
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard Viele Tabellen und Spalten (Verwirrung?)

Zuerst die Definition der Tabellen, für den Überblick


Tbl_zuordnung PLZ Zuordnung zu Gebieten
---------------------------------------
ID
Gebiets_id (aus Tbl_plz_gebiete)
PLZ
Land_der_plz


Tbl_plz_gebiete
---------------
ID
Gebietsbezeichnung
Gebietstyp
Staat

plz_stammdaten
----------------
ID
Stammdaten_plz
Stammdaten_ort

Angebotstabelle
----------------------
ID
Kategorie
Region_name
Region_id (ID aus Tbl_plz_gebiete)
Preis
beschreibung
Warengruppenid



PHP-Code:
SELECT     Angebotstabelle.IDAngebotstabelle.C001Angebotstabelle.C002
Angebotstabelle.C005
FROM      Tbl_plz_gebiete
Angebotstabelle
WHERE    

Angebotstabelle.Warengruppenid 12  OR 
Angebotstabelle.Warengruppenid 26  OR 
Angebotstabelle.Warengruppenid 27  OR 
Angebotstabelle.Warengruppenid 28  OR 
Angebotstabelle.Warengruppenid 29  OR 
Angebotstabelle.Warengruppenid 30  OR 
Angebotstabelle.Warengruppenid 31  OR
Angebotstabelle.Warengruppenid 32  OR 
Angebotstabelle.Warengruppenid 33  OR 
Angebotstabelle.Warengruppenid 34  OR 
Angebotstabelle.Warengruppenid 35  OR Angebotstabelle.Warengruppenid 36  OR 

Angebotstabelle.Warengruppenid 37  OR Angebotstabelle.Warengruppenid 38  OR 

Angebotstabelle.Warengruppenid 39  OR 
Angebotstabelle.Warengruppenid 40  )

AND 
Tbl_plz_gebiete.Staat 'DE' 
AND Tbl_plz_gebiete.ID Angebotstabelle.Staat
GROUP BY Angebotstabelle
.Region_name
ORDER BY Angebotstabelle
.Region_name 

Diese Abfrage gibt folgendes aus
142 Luftsport & Weltraum > Ballonfahren > Alle Startpl... Aachen 229.00
1445 Luftsport & Weltraum > Ballonfahren > Alle Startpl... Aachener Dom 229.00
1582 Luftsport & Weltraum > Ballonfahren > Alle Startpl... Aachener Rathaus 229.00
.
.
.



Und ich möchte ich gerne einen Filter erstellen, der mir alle Angebote in einem speziellem Regierungsbezirk bzw. landeskreis anzeigt

Die Landkreis und die Regierungsbezirke stehen in der PLZ Gebiete ->
Tbl_plz_gebiete.Gebietsbezeichnung
das heißt ich müsste über die Zuordnungstabelle Tbl_zuordnung gehen und die Postleitzahlen aus
plz_stammdaten laden und vergleichen mit der Ausgabe meiner SQL Abfrage.

Hat da vielleicht irgendjemand eine Idee wie ich dieses bewerkstelligen kann?
Mit Zitat antworten
  #2 (permalink)  
Alt 19-07-2008, 11:52
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

JOINS, das leidige Thema! Such dir den passenden raus.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3 (permalink)  
Alt 19-07-2008, 12:14
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Gedacht und probiert hab ich es auch Naja wenn das damit möglich ist, werd ich es mal testen.
Dank dir
Mit Zitat antworten
  #4 (permalink)  
Alt 19-07-2008, 12:25
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist gerade online
Registriert seit: Mar 2008
Beiträge: 3.576
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Code:
Angebotstabelle.Warengruppenid = 12  OR 
Angebotstabelle.Warengruppenid = 26  OR 
Angebotstabelle.Warengruppenid = 27  OR 
Angebotstabelle.Warengruppenid = 28  OR 
Angebotstabelle.Warengruppenid = 29  OR 
Angebotstabelle.Warengruppenid = 30  OR 
Angebotstabelle.Warengruppenid = 31  OR
Angebotstabelle.Warengruppenid = 32  OR 
Angebotstabelle.Warengruppenid = 33  OR 
Angebotstabelle.Warengruppenid = 34  OR 
Angebotstabelle.Warengruppenid = 35  OR
Angebotstabelle.Warengruppenid = 36  OR 
Angebotstabelle.Warengruppenid = 37  OR
Angebotstabelle.Warengruppenid = 38  OR 
Angebotstabelle.Warengruppenid = 39  OR 
Angebotstabelle.Warengruppenid = 40
Kürzer:
Code:
Angebotstabelle.Warengruppenid IN (12, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40)
Außerdem kannst du mit AS Tabellennamen ein Alias geben und musst nicht jedesmal den vollen Namen ausschreiben.
Mit Zitat antworten
  #5 (permalink)  
Alt 19-07-2008, 12:42
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Oh, danke das erleichtert einige Schreibarbeit
Mit Zitat antworten
  #6 (permalink)  
Alt 21-07-2008, 09:29
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habe da mal was gebastelt

PHP-Code:
SELECT plz_stammdaten.C001plz_stammdaten.C002
FROM plz_stammdaten

LEFT OUTER JOIN Tbl_zuordnung 
ON 
(Tbl_zuordnung.PLZ plz_stammdaten.Stammdaten_plz)
LEFT OUTER JOIN Tbl_plz_gebiete 
ON 
(Tbl_plz_gebiete.ID '6748'
Leider bekomme ich immer ein gone away von meinem SQL Server.
Ich muss dazu sagen das die T132 über 1 Millionen Datensätze besitz. Kann man das irgendwie optimieren? Das diese schneller funktioniert?

Das ist jetzt erstmal Step1 lade alle Postleitzahlen aus einer bestimmten Region (hier 6748 = NRW)

Oder soll ich einen View erstellen, oder gibt es da irgendwas?

Danke
Mit Zitat antworten
  #7 (permalink)  
Alt 21-07-2008, 10:33
case
 Registrierter Benutzer
Links : Onlinestatus : case ist offline
Registriert seit: Mar 2007
Beiträge: 265
case ist zur Zeit noch ein unbeschriebenes Blatt
case eine Nachricht über ICQ schicken
Standard

Hallo,

ja, du kannst Indices auf die Join-Spalten setzen und dann musst du im Join die Tabellen verknüpfen.

ON (Tbl_plz_gebiete.ID = '6748')

womit ist die id denn verknüpft? oder soll bei jedem Query genau diese Spalte mit ausgegeben werden???
__________________
signed oder unsigned... das ist hier die Frage
Mit Zitat antworten
  #8 (permalink)  
Alt 22-07-2008, 22:15
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So ich habe das Problem hinbekommen, leider hat sich ein neues Problem ergeben. Wie immer halt

Die Abfrage dauert 6 -10 sekunden
ist es möglich mit indices irgendwie zwei tabellen / spalten zu verbinden

in etwas so

Tabelle_x.PLZ = Tabelle_y.PLZ

und dann diese mit indices zu verbinden ?

Oder ist eine Optimierung irgendwie anders möglich?

Mit Optimierungen kenne ich mich leider nicht so aus, nur so ist es eine Zumutung

Geändert von none (22-07-2008 um 22:30 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 23-07-2008, 08:53
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry hab den SQL Befehl vergessen.

Diese Ausgabe dauert ca. 6 Sekunden
PHP-Code:
SELECT        Angebotstabelle.ID
            
Angebotstabelle.Kategorie
            
Angebotstabelle.Region_name
            
AngebotstabelleRegion_id
            
Angebotstabelle.preis 
            
Tbl_zuordnung.Gebiets_id
            
Tbl_plz_gebiete.staat
            
plz_stammdaten.Stammdaten_plz
            
plz_stammdaten.Stammdaten_ort as ORT 

FROM         plz_stammdaten

            
Tbl_zuordnung
            
Angebotstabelle
            
Tbl_plz_gebiete 

WHERE         Angebotstabelle
.C008 
            IN 
12 ,26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 
AND         
Tbl_zuordnung.Region_id Angebotstabelle.Region_id 
AND            plz_stammdaten.Stammdaten_plz Tbl_zuordnung.PLZ 
AND         Tbl_plz_gebiete.ID Tbl_zuordnung.Gebiets_id
AND         Tbl_zuordnung.staat 'DE' 
            
AND Tbl_plz_gebiete.ID '6748' (Regionsid aus Tbl_plz_gebiete )
            
GROUP BY     ORT 
ORDER BY     Angebotstabelle
.Kategorie 
Mit Zitat antworten
  #10 (permalink)  
Alt 23-07-2008, 11:10
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du ein «GROUP BY ort» in der Abfrage hast, bekommst du für alle andern Attribute sowieso nur Zufallswerte. Deshalb macht es gar keinen Sinn, diese Abfrage - für die alle andern Datenbanksysteme ausser MySQL eine Fehlermeldung generieren würden - optimieren zu wollen.
__________________
Gruss
H2O
Mit Zitat antworten
  #11 (permalink)  
Alt 23-07-2008, 11:22
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also die Ausgabe ist in Ordnung, group by Ort hab ich rausgenommen.
Ist auch schon wesentlich schneller geworden.

Das Problem ist jetzt noch, dass dieWarengruppen ( 12 ,26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 ) hier fix sind.
D.h. das ist begrenzt. Aber ich brauch das als unbegrenzte ausgabe, dann dauert es leider immernoch 3 sek. Zu langsam bei 9 - 11000 Besucher täglich
Mit Zitat antworten
  #12 (permalink)  
Alt 23-07-2008, 11:28
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht bist du so freundlich und liest dir nochmal die erste Antwort durch. Bevor das nicht berücksichtigt wurde, brauchst du dich über zu lange Zeiten wohl nicht beschweren...
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #13 (permalink)  
Alt 23-07-2008, 11:33
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo TobiaZ,

danke für deine Antwort.

Ist es also wirklich so, das Joins wesentlich schneller sind?
Ich habe mir das durchgelesen, nur war 'ich' der Meinung, dass es lediglich ein Umstellen der SQL Abfrage ist, weil ob ich nun so die gesamten PLZs durchgehe oder ob ich mit LEFT JOIN die gesamte Tabelle lade, für mich ergibt das keinen Sinn …

Vielleicht irre ich mich, dann entschuldigt dieses bitte
Mit Zitat antworten
  #14 (permalink)  
Alt 23-07-2008, 11:55
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Also ich hab das ja sicher nicht einfach so zum Spaß oder als nettes Gimmick als erste Antwort geschrieben. Kannst also schon davon ausgehen, dass deine Abfrage davon beschleunigt wird. Wobei man das eigentlich als Normalzustand ansehen sollte.

Du erzeugst aktuell ein Kartesisches Produkt von mehreren Tabellen. Also alles mit allem gekreuzt. Da ist es doch klar, dass das mehr Speicher und somit auch Performance frisst, als wenn du nur die Datensätze miteinander verbindest, die auch wirklich zusammen gehören.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #15 (permalink)  
Alt 25-07-2008, 18:43
none
 Registrierter Benutzer
Links : Onlinestatus : none ist offline
Registriert seit: Apr 2006
Beiträge: 68
none ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

ich habe mich jetzt mal mit den einzelnen Joins befasst und ich muss sagen, es ist besser geworden

Leider habe ich noch immer eine Laufzeit von 5 Sek

hier nochmal der Code, vielleicht habt ihr ja noch eine Idee wie ich den Code verbessen (vorallem verschnellern) kann

Vielen Dank im Vorraus
PHP-Code:
 SELECT AngebotstabelleStammdaten_ort.ORT
plz_stammdate.plzAngebotstabelle.kategorieAngebotstabelle.region_nameAngebotstabelle.preis
Tbl_plz_gebiete.Gebietsname
FROM tbl_zuordnung
LEFT JOIN Tbl_plz_gebiete ON Tbl_plz_gebiete
.ID tbl_zuordnung.gebietsid
LEFT JOIN plz_stammdate ON Tbl_zuordnung
.plz plz_stammdate.plz
LEFT JOIN Angebotstabelle ON Angebotstabelle
.regions_id Tbl_plz_gebiete.ID
WHERE Tbl_plz_gebiete
.ID '6748'
GROUP BY Angebotstabelle.ID
ORDER BY Angebotstabelle
.ID ASC 
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 10:47 Uhr.