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
  #16 (permalink)  
Alt 24-03-2010, 15:03
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Du brauchst nur bands_tags.* im Select-Teil wegzulassen. Und im group_concat musst du natürlich alle_genres verwenden.

Hab das soweit versucht, mit folgendem Ergebnis:

Mit Zitat antworten
  #17 (permalink)  
Alt 24-03-2010, 15:09
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Erstens: Der JOIN ist Blödsinn, ich sehe es aber jetzt erst:
Code:
ON alle_genres.tag = bands_tags.tag
Das liefert dir doch genau dieselben. Es soll ja aber die liefern, die zur selben Band gehören. Also musst du über die Spalte band_id joinen, nicht über tag.

Zweitens:
Code:
GROUP_CONCAT(DISTINCT ...)
Damit erscheint jedes Genre nur einmal, auch wenn es dann vermutlich sowieso nur einmal auftauchen würde, aber ich kenne ja nicht deine komplette DB und deine späteren Abfrageabsichten. Also schadet es auch nicht.

Drittens: Sieh dir das Telefonnummern-Beispiel nochmal ganz in Ruhe und ganz genau an, bis du es vollständig verstanden hast. Deine Herangehensweise ist noch etwas zu wild und zeugt von "Probieren über Studieren", was im DB-Umfeld nicht unbedingt zielführend ist.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (24-03-2010 um 15:13 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 24-03-2010, 15:35
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, vielen vielen Dank soweit, ich sollte mir das mal in Ruhe anschauen und auch richtig verstehen.

Mein Problem ist einfach, dass wir für unser Magazin derzeit keinen Programmierer haben und ich das umzusetzen versuche, was ich kann. So ist halt momentan die Situation, auch wenn sie nicht befriedigend ist.
Mit Zitat antworten
  #19 (permalink)  
Alt 25-03-2010, 18:20
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Supi, jetzt geht's:

http://vampster.com/genres/example_g...modern%20metal
Das klappt gut, da habe ich nur 5 Bands mit 2 Genres im Schnitt.


Bei Dark Wave als Genre wird's schon holpriger:
http://vampster.com/genres/example_g...re=dark%20wave

54 passende Bands im Archiv -> Query braucht über 20 Sekunden.

Bei anderen Genres, zu denen wir richtig viele Bands haben, läuft die Abfrage ins Nirwana.

Die Abfrage dazu sieht so aus:
Code:
SELECT bands_master.name, bands_tags.band_id, bands_tags.naehe, 
GROUP_CONCAT( " ", alle_genres.tag ) 
FROM bands_tags
JOIN bands_master ON bands_master.id = bands_tags.band_id
JOIN bands_tags AS alle_genres ON alle_genres.band_id = bands_master.id
WHERE bands_tags.tag = "dark wave"
GROUP BY name
ORDER BY name ASC
Hast du eine Idee woran das liegen könnte?

Vielen Dank & Gruß,
Markus

Geändert von boxi123 (26-03-2010 um 08:49 Uhr)
Mit Zitat antworten
  #20 (permalink)  
Alt 25-03-2010, 18:27
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Sind deine Tabellen indiziert und wenn ja, wie?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #21 (permalink)  
Alt 25-03-2010, 18:35
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Sind deine Tabellen indiziert und wenn ja, wie?
Oh je du stellst mir Fragen..
Kurze Erklärung: Der Quellcode und die Datenbank stammen ursprünglich nicht von mir. Ich lerne nun eben nach und nach, was ich für auftretende Probleme benötige.

Dann schätze ich, sollte ich mich nun mal mit dem Indizieren beschäftigen.
Mit Zitat antworten
  #22 (permalink)  
Alt 25-03-2010, 18:36
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von boxi123 Beitrag anzeigen
Dann schätze ich, sollte ich mich nun mal mit dem Indizieren beschäftigen.
Schätze ich auch
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #23 (permalink)  
Alt 25-03-2010, 18:39
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Schätze ich auch
verdammt... von wegen "ich programmier mal kurz ein neues Feature"..

Na dann mach ich das mal
Mit Zitat antworten
  #24 (permalink)  
Alt 25-03-2010, 20:22
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hab folgendes getestet: Die Tabelle bands_master hat in der Spalte "name" (also der Band-Name) ein "Volltext" und ein "Index" erhalten, und die Tabelle bands_tags in der Spalte tag (die Genres) ebenso.
Query für "Dark Wave" braucht damit anstatt 20 Sekunden nur noch 0.3 Sekunden.

Bei anderen Abfragen dauert es aber noch zu lange
gothic metal -> 203 Bands -> 1.9s
thrash metal -> viele bands -> nirwana

War das Käse oder prinzipiell der Richtige Ansatz?
Mit Zitat antworten
  #25 (permalink)  
Alt 25-03-2010, 20:48
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Volltext-Indizes gibt es doch in InnoDB gar nicht. Nutzt du etwa MyISAM? Das würde ich nochmal überdenken, schon aus Gründen der referentiellen Integrität. (Hat mit der Abfrageperformance aber jetzt nicht so viel zu tun.)

Wichtig sind in erster Linie mal Primärschlüssel und Indizes auf deine Pseudo-Fremdschlüssel-Spalten (MyISAM hat ja keine echten Fremdschlüssel). Außerdem macht es unter Umständen Sinn, weitere Spalten zu indizieren, die oft in Where-Klauseln verwendet werden.

Jedenfalls siehst du ja an der Verbesserung der Abfragezeit, dass du im Grunde auf dem richtigen Weg bist. Als Stichwort wäre noch EXPLAIN zu nennen, um das weiter zu optimieren.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #26 (permalink)  
Alt 25-03-2010, 20:51
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke!
Dann werkle ich mal weiter und melde mich mit neuen Erkenntnissen
Mit Zitat antworten
  #27 (permalink)  
Alt 26-03-2010, 16:02
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Aus dem EXPLAIN werde ich noch nicht wirklich schlau.
Fürs Genre "Black Metal" benötigt die Abfrage bei 497 Bands 93 Sekunden, das EXPLAIN sagt mir folgendes:

Abfrage:
Code:
EXPLAIN SELECT bands_master.name, bands_tags.band_id, 
GROUP_CONCAT( " ", alle_genres.tag ) 
FROM bands_tags
JOIN bands_master ON bands_master.id = bands_tags.band_id
JOIN bands_tags AS alle_genres ON alle_genres.band_id = bands_master.id
WHERE bands_tags.tag = "black metal"
GROUP BY name
Das EXPLAIN-Ergebnis:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE bands_tags ref tag,band_id,tag_2 tag 100 const 488 Using where; Using temporary; Using filesort
1 SIMPLE bands_master eq_ref PRIMARY PRIMARY 3 vampster_01.bands_tags.band_id 1 Using where
1 SIMPLE alle_genres ref band_id band_id 4 vampster_01.bands_master.id 2 Using where

Kann ich nicht wirklich viel damit anfangen.
Mit Zitat antworten
  #28 (permalink)  
Alt 26-03-2010, 16:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Das sieht so aus, als ob du noch keine Indizes hättest. Statt "using where" sollte (außer in der ersten Zeile) "using index" stehen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #29 (permalink)  
Alt 26-03-2010, 16:22
boxi123
 Registrierter Benutzer
Links : Onlinestatus : boxi123 ist offline
Registriert seit: Jan 2008
Beiträge: 20
boxi123 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, eigentlich schon?!
die bands_tags hat jeweils über band_id, tag und naehe einen Index,
die bands_master hat auch Indexe.

alle_genres erzeuge ich durch den Join, da kann ich ja nichts indexieren?

Ah, okay, hatte bei der bands_master wohl doch noch nicht richtig indexiert.

Hab mich von der Meldung "The following indexes appear to be equal and one of them should be removed" abschrecken lassen.
Jetzt hab ich diese Meldung, dafür schnurrt aber die Abfrage?!

Geändert von AmicaNoctis (26-03-2010 um 16:39 Uhr) Grund: Doppelpost
Mit Zitat antworten
  #30 (permalink)  
Alt 26-03-2010, 16:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zeig mal bitte die CREATE TABLE Statements.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
group by, group_concat, sql


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage über mehrere DB'S (join) + group + zählen evil_knievel SQL / Datenbanken 2 02-09-2008 10:28
[SQL allgemein] Abfrage mit GROUP BY mapro SQL / Datenbanken 1 22-07-2007 19:28
email betreff micht lesbar jogisarge PHP Developer Forum 4 23-08-2006 14:14
GROUP_CONCAT mit Int strauberry SQL / Datenbanken 0 02-02-2006 11:12
count und group by für blätterfunktion funktioniert nicht westberlin SQL / Datenbanken 6 08-11-2003 13:40

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 16:41 Uhr.