Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

SQL Problem

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 14:38

Hi, ich grübel hier gerade an einer Abfrage

Tabelle sieht so aus.

ID
rubrik
Prdtyp
Name
Preis

Beispiel

ID | 1
rubrik | 2
Prdtyp | 5
Name | Löffel
Preis | 3.45

Das Problem ist, ich will nur die billigsten Eintrage anzeigen.
Dabei soll jeder Produkttyp nur einmal vorkommen.
Also wenn 4 Einträge mit dem gleichen Produkttyp vorhanden sind, soll davon nur der billigste angezeigt werden.

Meine Abfrage sieht so was.

$query = mysql_query ("SELECT id,name,preis FROM shop_db where rubrik = '$rubclass' GROUP BY prdtyp ORDER BY preis ASC LIMIT 25 ");

Das Problem, er zeigt mir zwar immer nur einen Eintrag pro Produkttyp an, aber nicht den billigsten ??

Wo ist der denkfehler ?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Anonymous

Beitrag von Anonymous » 01.09.2005, 14:55

SELECT id,name, min(preis)......

teste mal und meld dich wieder...

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 15:05

also das ergebniss ist das gleiche, blos das er in der Preisspalte nun keinen Preis mehr anzeigt.

Also er soll mir die billigsten Einträge anzeigen, und dabei gleiche Produkttypen nur einmal berücksichtigen.

Anonymous

Beitrag von Anonymous » 01.09.2005, 15:08

SELECT id,name, min(preis) as preis FROM....

dann ma so...

oldInternetUser
PostRank 9
PostRank 9
Beiträge: 1250
Registriert: 19.03.2005, 12:52

Beitrag von oldInternetUser » 01.09.2005, 15:11

$query = mysql_query ("SELECT id,name,preis FROM shop_db where rubrik = '$rubclass' GROUP BY prdtyp ORDER BY preis ASC LIMIT 25 ");
Das wird von mySql akzeptiert? Da ist ja bereits der Grundcode falsch bzw. würde in einem Standard-System mit Kompilierungsfehler zurückgewiesen werden.

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 15:14

Oho, das scheint zu gehen

Nun gibt es aber ein neues Problem.
In jeder dieser Spalte ist noch der Link zu diesem Produkt.

Wenn ich deine SQL Anweisung nehme, ist passt der Link nicht mehr zum billigsten Eintrag.

Beispiel:

Eintrag 1 | 15.00 | Link A
Eintrag 2 | 14.00 | Link B

Jetzt gibt die Abfrage mir folgendes aus

Name | 14.00 | Link A

Es müsste aber link B sein ???

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 15:16

oldInternetUser hat geschrieben:
$query = mysql_query ("SELECT id,name,preis FROM shop_db where rubrik = '$rubclass' GROUP BY prdtyp ORDER BY preis ASC LIMIT 25 ");
Das wird von mySql akzeptiert? Da ist ja bereits der Grundcode falsch bzw. würde in einem Standard-System mit Kompilierungsfehler zurückgewiesen werden.
Das ging, nur hatte ich das Problem, das nicht der billigste Eintrag angezeigt wurde.

derHund
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 08.01.2005, 14:39

Beitrag von derHund » 01.09.2005, 16:03

klingt sehr stark nach:
The Rows Holding the Group-wise Maximum of a Certain Field?

https://dev.mysql.com/doc/mysql/en/exam ... p-row.html

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 16:05

So, habs nun über 2 Abfragen gemacht

$query = mysql_query ("SELECT distinct Prdtyp FROM shop_db where rubrik = '$rubclass' ORDER BY preis ASC LIMIT 25 ");

while ($seite=mysql_fetch_array($query)):

$prd = mysql_query("SELECT name,preis,link FROM shop_db where Prdtyp = '$seite[Prdtyp]' order by preis limit 1 ");


So, nun geht es, aber ich wollte das eigentlich alles in einer Abfrage erledigen.
2 Abfragen dauern doch in der Regel was länger.

Ice Man
PostRank 9
PostRank 9
Beiträge: 2477
Registriert: 04.06.2003, 19:16

Beitrag von Ice Man » 01.09.2005, 16:08

derHund hat geschrieben:klingt sehr stark nach:
The Rows Holding the Group-wise Maximum of a Certain Field?

https://dev.mysql.com/doc/mysql/en/exam ... p-row.html
Genau, sowas meinte ich.
Muss mir das mal genau anschauen.

Ist doch das gleiche wie meine 2 Abfragen oder ?

Anonymous

Beitrag von Anonymous » 01.09.2005, 17:02

alles in 1 Abfrage zu packen ist schneller, da hierbei die zwischenzeitliche Kommunikation zwischen script und DB wegfällt... und mySQL ggf. die 1 Abfrage besser optimieren kann...

in dem Beispiel wird das mit 2 Abfragen über eine temporäre tabelle gemacht, so dass die Kommunikation zwischen Script und DB gering gehalten wird... also ähnlich deiner jetztigen Lösung, aber ohne unnötige Kommunikation zwischen script und DB

derHund
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 08.01.2005, 14:39

Beitrag von derHund » 01.09.2005, 17:20

in dem Beispiel wird das mit 2 Abfragen über eine temporäre tabelle gemacht,
beziehst du dich auf den manual-link? dort werden mehrere möglichkeiten vorgestellt, auch in den user comments. die dort von Csaba Gabor gepostete methode finde ich am besten.

Anonymous

Beitrag von Anonymous » 01.09.2005, 17:47

jo, bezog sich auf das erste beispiel mit 2 Abfragen in dem manual... die comments hab ich mir garnicht mehr durchgelesen... :roll:

heddesheimer
PostRank 4
PostRank 4
Beiträge: 130
Registriert: 03.08.2005, 13:45

Beitrag von heddesheimer » 03.09.2005, 12:31

Ich hatte mal eine ähnliche Frage zu beantworten und habe dann diesen Artikel dazu geschrieben:

https://www.heddesheimer.de/coaching/mysql_group.html

Du musst nur die Anforderung 'älteste Person' mit 'niedrigster Preis' austauschen ;-)

Gruß Marian
https://www.lernpilot.de/blog/
Das Weblog zum Thema Lernen

derHund
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 08.01.2005, 14:39

Beitrag von derHund » 03.09.2005, 13:56

hast du mal einen perfomance-vergleich zwischen der temp-tabellen-version und der left-join-is-null-version gemacht?

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag