php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.12.2005, 19:12  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard frage zu performance, bzw. serverbelastung bei abfrage...

ich habe auf unserer modellbauseite ein script geschrieben indem alle modelle angezeigt werden.

über ein dropdownfeld können dann einzelne modellsparten angezeigt werden: http://www.msgu.at/index.php?cont=models.php

ich wollte hier noch einbauen dass immer danebensteht wieviele modelle es für das jeweilige dropdownfeld gibt. sprich ich muss für jedes feld eine abfrage machen. ist das zu stark datenbank belastend oder ist das in DIESEM umfang egal. müsste dann ja wie gesagt für jedes feld eine abfrage machen. und das bei jedem seitenaufruf. sprich in unserem falle hier 6 hintereinander.

was sagt ihr dazu?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.12.2005, 19:24  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Stehen die unterschiedlichen Sparten nicht in einer Tabelle, so dass du mit COUNT() und GROUP BY arbeiten kannst?
xabbuh ist offline  
Alt 28.12.2005, 19:46  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

meine datenbank sieht so aus:

tabelle_sparten:
- sparten_id
- sparten_name

tabelle_modelle:
- modell_id
- sparten_id
- modell_name

meine abfrage der spalten für das dropdown lautet:

SELECT FROM tabelle_sparten ...

dann mit while alle anzeigen.

unten dann die abfrage der modelle:

SELECT FROM tabelle_modelle ...

wenn eine sparte ausgewählt wurde wird die sparten id übergeben und die mysql abfrage lautet:

SELECT FROM tabelle_modelle ... WHERE sparten_id = $_GET['sparten_id']

also müsste ich ja oben in der while schleife schon immer eine neue sql abfrage machen mit echo mysql_num_rows($query);
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 28.12.2005, 20:04  
Gast
 
Beiträge: n/a
Standard

Reine sql Frage, hat in der Form nichts mit php zu tun.
Das geht mit Count(), GROUP BY und JOIN.
Lassen wir erstmal das JOIN weg und beschäftigen uns mit tabelle_modelle.
Wie kannst Du da Count() und GROUP BY anwenden, um in einem Rutsch für alle sparten_id die jeweilige MEnge an Elementen zu ermitteln?
 
Alt 28.12.2005, 20:58  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

oje. mein hauptmanko. mysql. gibts irgendwo eine gute deutsche anleitung zu dem thema? hab mich schonmal mit der sache auseinandergesetzt, aber leider nicht durchgeblickt.

mache kombinierte abfragen jetzt immer so:

SELECT t1.spalte1, t2.spalte1, t2.spalte2 FROM tabelle1 AS t1, tabelle2 AS t2 WHERE t2.spalte2 = t1.spalte1

das nützt mir hier aber wohl nix oder?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 28.12.2005, 23:55  
Gast
 
Beiträge: n/a
Standard

Code:
SELECT
  s.sparten_name,m.sparten_id,Count(m.modell_id)
FROM
  tabelle_modelle as m
JOIN
  tabelle_sparten as s
ON
  s.sparten_id=m.sparten_id
GROUP BY
  sparten_id
 
Alt 29.12.2005, 03:10  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

ok. hab mich jetzt in das thema eingelesen und ein gutes tutorial gefunden: http://www.tu-chemnitz.de/docs/mysql/mysql-169.html

mir ist jetzt auch klar wozu die JOIN / GROUP abfrage... nämlich damit es schneller geht und weniger ressourcen braucht.

ABER: wenn kein modell gespeichert ist, wird nicht 0 ausgegeben, sondern einfach NIX. hab jetzt schon gesehen dass mit COUNT(*) eigentlich auch die empty ausgegeben werden müssten. dies ist aber nicht der fall:

Code:
 SELECT t1.mod_kind_id,t1.mod_kind_desc,COUNT(*) AS counts FROM mod_kind AS t1 JOIN mb_models AS t2 ON t1.mod_kind_id = t2.mod_kind GROUP BY t1.mod_kind_id
gibt folgendes ergebnis aus:
Zitat:
1: Tragfl?che, 49
2: Helikopter, 3
4: Sonstiges, 1
5: Boot, 1
bei 3: Auto jedoch nichts, da hier noch keine daten gespeichert sind. hier mal die tabellenstruktur:

tabelle mod_kind:
spalte mod_kind_id
spalte mod_kind_desc

tabelle mb_models:
spalte mb_mod_id
spalte mb_mod_kind

ist eigentlich eh logisch dass er da nix findet wenn kein model mit der mod_kind_id 3 gespeichert ist. aber wie könnte ich es hinbekommen dass diese dort auch angezeigt wird mit dem wert 0? mit count(*) funktioniert es mal nicht.
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 29.12.2005, 05:26  
Gast
 
Beiträge: n/a
Standard

Dafür lies Dir mal die Beschreibung von RIGHT JOIN/LEFT JOIN durch.
Und bitte auch sql Anweisungen strukturiert aufschreiben. Bandwurmeinzeilern sind furchtbar unübersichtlich.


Ich bleibe jetzt bei der ersten Beschreibung
Zitat:
meine datenbank sieht so aus:

tabelle_sparten:
- sparten_id
- sparten_name

tabelle_modelle:
- modell_id
- sparten_id
- modell_name
Code:
SELECT
  s.sparten_name,s.sparten_id,Count(m.modell_id)
FROM
  tabelle_modelle as m
RIGHT JOIN
  tabelle_sparten as s
ON
  s.sparten_id=m.sparten_id
GROUP BY
  sparten_id
 
Alt 29.12.2005, 12:20  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

@bruchpilot: hatte die sql anweisung nur per echo ausgegeben und hier her kopiert da ich definitionen verwende.

sieht natürlich normalerweise so aus:
Code:
$sql = 'SELECT t1.mod_kind_id,t1.mod_kind_desc,COUNT(t2.mod_kind) AS counts 
        FROM '.TABLE_MODELS_KIND.' AS t1 
        LEFT JOIN '.TABLE_MODELS.' AS t2 
        ON t2.mod_kind = t1.mod_kind_id 
        GROUP BY t1.mod_kind_id';
mit diesem code funktioniert es jetzt. hab mir das left/right join angesehen. gibt ein fantastisches tutorial hierzu: http://www.tbee.de/mysql/t3_tabellen..._joinstart.php

jetzt passt es. danke nochmal @all.

ausgabe:
Zitat:
1: Tragfl?che, 49
2: Helikopter, 3
3: Auto, 0
4: Sonstiges, 1
5: Boot, 1
__________________
mfg Alexander Haim
Promaetheus ist offline  
 


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] MySql Frage: Problem mit einer etwas lomplexeren Abfrage tomtaz Datenbanken 5 24.06.2008 22:36
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
header nach mehrstufiger abfrage Promaetheus PHP Tipps 2008 5 27.09.2007 14:33
ImageMagick Performance Problem M3g4Star PHP Tipps 2006 1 30.11.2006 09:35
abfrage frage :) annaloga PHP Tipps 2006 7 12.06.2006 21:54
Performance bei select abfrage Diet Datenbanken 4 14.05.2006 21:20
Eine Frage der Performance CSS PHP Tipps 2005 9 18.05.2005 00:26
Frage zu einer Abfrage Datenbanken 4 04.03.2005 09:42
hab auch eine frage zu einer abfrage Sclot Datenbanken 3 04.03.2005 09:29
SQL Abfrage WICHTIG !!! Datenbanken 9 14.07.2004 16:28
komplizierte mySQL Abfrage Datenbanken 6 25.06.2004 15:34
[Erledigt] Fehlerhafte Abfrage ? Datenbanken 15 24.06.2004 17:10
[Erledigt] mysql Abfrage Datenbanken 5 18.06.2004 14:16
huhu wider ne frage SQL abfrage PHP Tipps 2004 7 16.06.2004 22:00
[Erledigt] Variable per GET übergeben und DB Abfrage nutzen PHP Tipps 2004 4 01.06.2004 15:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql abfrage serverbelastung, performance sql abfrage, php serverbelastung sql, vbulletin serverbelastung, sql abfrage belastung, mysql_num_rows() serverbelastung

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:35 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.