php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-09-2010, 15:23
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard Datenbankaufbau Produktvergleich speichern

Hi,

auf meiner Seite kann man 2 Produkte miteinander vergleichen und ich möchte in einer Datenbank nur die jeweiligen produktnamen (id's) der Produkte speichern, die miteinander verglichen wurden.

ist folgender Ansatz korrekt, bzw. was gibt es für eine bessere Lösung?

vergleich
---------
-id
-produkt1
-produkt2
-datum

oder so

vergleich
---------
-id
-datum

vergleich_details
---------------
-vergleich_id
-produkt

Ich möchte später herausbekommen welche Produkte am meisten miteinander verglichen wurden.
Mit Zitat antworten
  #2 (permalink)  
Alt 24-09-2010, 15:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Sollen immer nur genau zwei Produkte verglichen werden?
Oder ggf. auch mehrere in einem Vergleich? (Dann wäre der zweite Ansatz erst mal sinnvoller.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 24-09-2010, 17:54
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

bis jetzt sind es immer nur 2 Produkte, aber evtl. wird das ja auch mal mehr.
Es kommen ja dann schnell mehrere 100.000 Datensätze zusammen und um die Produktnamen bzw. Hersteller zu ermittlen muss ich ja einen Join auf die Produkttabelle machen. Welche möglichkeiten gibt es denn um die Geschwindigkeit zu erhöhen?
Mit Zitat antworten
  #4 (permalink)  
Alt 25-09-2010, 10:44
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

100.000 Rows sind für die gängigen RDBMS nur eine Fliegenschiss. Mit einem vernünftigen Schema – das scheint deins ja zu sein – und genügend RAM wirst du sehr lange keine Geschwindigkeitsprobleme haben. Du bist ja nicht Amazon. ;-)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-09-2010, 13:02
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

ich hab jetzt mal nach menem ersten Vorschlag von oben 500000 Datensätze eingefügt und in die Produktabelle so ca. 1000 Datensätze. Die folgende Abfrage benötigt immer ca. 3 Sekunden, das erscheint mir schon recht viel. Wie kann man das noch verbessern?

Code:
SELECT 
	v.produkt_1,
        v.produkt_2, 
        p.hersteller, 
        p2.hersteller, 
        COUNT(*) as anzahl
FROM 
	vergleich v
INNER JOIN 
        produkte p on p.name = v.produkt_1 
INNER JOIN 
        produkte p2 on p2.name = v.produkt_2
WHERE 
        p.hersteller = p2.hersteller
AND 
        p.hersteller = 'Dell'
GROUP BY 
        CONCAT(produkt_1,produkt_2)
ORDER BY 
        anzahl DESC
LIMIT 0,5
Mit Zitat antworten
  #6 (permalink)  
Alt 25-09-2010, 13:10
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wozu soll das CONCAT() gut sein? Außerdem musst du im GROUP BY alle Spalten anführen, die auch im SELECT verwendet werden.
Mit Zitat antworten
  #7 (permalink)  
Alt 25-09-2010, 13:14
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Warum muss ich im Group By alle Spalten auflisten?
Das Concat ist dafür, um die Anzahl der Vergleiche von z.B. Produkt a und Produkt b zu bekommen, also wie viel mal wurde Produkt a mit Produkt b verglichen.

EDIT:

Habe grad gemerkt das es auch ohne Concat geht, also GROUP BY produkt_1,produkt_2. Da ich nach der Kombination aus beiden Produkten gruppieren wollte, dachte ich, das die Spalten noch verbunden werden müssen


Geändert von lx-club (25-09-2010 um 13:20 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 25-09-2010, 13:17
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lx-club Beitrag anzeigen
Warum muss ich im Group By alle Spalten auflisten?
Da es erstens nicht SQL-kompatibel ist (jede andere Datenbank außer MySQL würde dir zurecht einen Fehler werfen) und zweitens es zu nicht eindeutigen Ergebnissen kommen kann.

"When grouping, keep in mind that all columns that appear in your SELECT column list, that are not aggregated (used along with one of the SQL aggregate functions), have to appear in the GROUP BY clause too."

SQL GROUP BY

Zitat:
Zitat von lx-club Beitrag anzeigen
Das Concat ist dafür, um die Anzahl der Vergleiche von z.B. Produkt a und Produkt b zu bekommen, also wie viel mal wurde Produkt a mit Produkt b verglichen.
Nö, dafür ist das GROUP BY da. CONCAT() ist hier überflüssig und frisst außerdem unnötig Performance.
Mit Zitat antworten
  #9 (permalink)  
Alt 25-09-2010, 13:25
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke, für die Info.
Hab das Concat entfernt und mal alle Spalten (ausser anzahl) bei GROUP BY mit angegeben, doch von der Performance her sind es immer noch ca. 3 Sekunden (Beim zweiten ausführen der Abfrage wird wohl die Abfrage immer gecacht)
Mit Zitat antworten
  #10 (permalink)  
Alt 25-09-2010, 13:29
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Was sagt EXPLAIN?

Gibts eigentlich einen besonderen Grund, warum die Herstellerspalte ein Text ist? Sollte das nicht ein Fremdschlüssel auf die Herstellertabelle sein?
Mit Zitat antworten
  #11 (permalink)  
Alt 25-09-2010, 13:35
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Was sagt EXPLAIN?

Gibts eigentlich einen besonderen Grund, warum die Herstellerspalte ein Text ist? Sollte das nicht ein Fremdschlüssel auf die Herstellertabelle sein?
Code:
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	SIMPLE 	v 	index 	NULL 	IDX_produkt 	104 	NULL 	500000 	Using index; Using temporary; Using filesort
1 	SIMPLE 	p2 	eq_ref 	PRIMARY,IDX_hersteller 	PRIMARY 	152 	func 	1 	Using where
1 	SIMPLE 	p 	eq_ref 	PRIMARY,IDX_hersteller 	PRIMARY 	152 	func 	1 	Using where
Den Fremdschlüssel muss ich noch hinzufügen. Ich habe die Produkttabelle als Dump bekommen und dort steht der Hersteller als Text drin. Ich weiß das ist falsch und alle Hersteller kommen auch noch in eine gesonderte Tabelle und dann mache ich noch einen Join auf die Herstellertabelle

Geändert von lx-club (25-09-2010 um 13:45 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 25-09-2010, 13:43
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von lx-club Beitrag anzeigen
von der Performance her sind es immer noch ca. 3 Sekunden (Beim zweiten ausführen der Abfrage wird wohl die Abfrage immer gecacht)
Du misst mit kalten Caches? Wozu?
Mit Zitat antworten
  #13 (permalink)  
Alt 25-09-2010, 13:46
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich meinte beim ersten Ausführen sind es 3 Sekunden und wenn ich die Abfrage erneut ausführe sind es halt 0.0001 Sekunden. (phpmyadmin) Wie kann ich das verlässlich ermitteln?

Geändert von lx-club (25-09-2010 um 13:53 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 25-09-2010, 22:30
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Was willst du ermitteln?
Mit Zitat antworten
  #15 (permalink)  
Alt 25-09-2010, 22:38
lx-club
 Registrierter Benutzer
Links : Onlinestatus : lx-club ist offline
Registriert seit: Nov 2003
Beiträge: 846
lx-club ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mir ist nicht klar was du mit kalter Cache meinst. Die Ausführungszeit wird ja immer im phpmyadmin angezeigt bzw. auch lokal in meinem Programm.
Hatte mich halt gewundert, weil ca. 3 Sekunden ja schon lang sind.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Datenbankaufbau. nohfreak SQL / Datenbanken 19 01-01-2008 15:42
Datenbankaufbau christian000 PHP Developer Forum 2 02-08-2007 18:18
Verzeichnisstruktur generieren / Datenbankaufbau / Abfrage Todde_P PHP Developer Forum 2 23-04-2007 09:23
[Script] Produktvergleich mit Datenbank spin_doctor Apps und PHP Script Gesuche 3 11-01-2007 14:45
datenbankaufbau?? whoda SQL / Datenbanken 4 03-09-2003 11:05

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 06:15 Uhr.