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 Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 25-08-2006, 12:08
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard SQL Abfrage nochmal (aus)sortieren

Hallo zusammen,

trotz Forensuche etc. kam ich auf keine Lösung bei folgendem Problem:

Also eine recht komplexe Datenbankabfrage:

PHP-Code:
SELECT u.u_iduz.uz_id, IF(u.u_waehrung != 11.00 uw.uw_umrechnung,1) * 
((
uz.uz_stpreis * (ABSTO_DAYS'2006-09-04' ) - TO_DAYS'2006-08-30' )) - 
COUNTuze.uze_uzid )) + 
SUMuze.uze_preis )) * IF(u.u_kostenberechnung='Person',5,1)) 
AS 
gesamtpreis
COUNT(uzs.uzs_id) AS verfuegbar 
FROM unterkunft 
AS 
LEFT JOIN verband 
AS v ON v.v_id u.u_vid 
LEFT JOIN u_zimmer 
AS uz ON uz.uz_uid u.u_id 
LEFT JOIN uz_expreise 
AS uze ON uz.uz_id uze.uze_uzid AND uze.uze_datum 
BETWEEN 
'2006-08-30' AND '2006-09-03' 
LEFT JOIN u_waehrung AS uw ON u.u_waehrung uw.uw_id 
LEFT JOIN uz_status uzs ON uz
.uz_id uzs.uzs_uzid AND uzs.uzs_datum 
BETWEEN 
'2006-08-30' AND '2006-09-03' 
GROUP BY u.u_id 
HAVING verfuegbar 

ORDER BY gesamtpreis 
Liefert folgendes Ergebnis, z.B.:

PHP-Code:
 u_id uz_id gesamtpreis verfuegbar
1 1 35 0
1 2 45 0
2 1 55 0
3 1 65 0
1 3 75 0 
Jetzt hätte ich es gern so dass von dass von u_id nur derjenige mit dem günstigsten Gesamtpreis angezeigt wird, also solls am Ende so aussehen:

PHP-Code:
 u_id uz_id gesamtpreis verfuegbar
1 1 35 0
2 1 55 0
3 1 65 0 
Vorschläge?

Also bitte nicht mit DISTINCT kommen, das klappt in diesem Fall nicht ... also ich hab eher an eine temporäre Tabelle gedacht, die dann wieder sortiert wird, ein guter Ansatz?

Geändert von aevo (25-08-2006 um 12:27 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 25-08-2006, 12:15
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

verstehe ich dich richtig? den geringsten gesamtpreis? nur eine ausgabe?

MIN (gesamtpreis) ?

gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 25-08-2006, 12:26
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Klappt so leider nicht, der Gesamtpreis wird ja so berechnet:

PHP-Code:
... IF(u.u_waehrung != 11.00 uw.uw_umrechnung,1) * 
((
uz.uz_stpreis * (ABSTO_DAYS'2006-09-04' ) - TO_DAYS'2006-08-30' )) - 
COUNTuze.uze_uzid )) + SUMuze.uze_preis )) * 
IF(
u.u_kostenberechnung='Person',5,1)) AS gesamtpreis ... 
Wenn ich daraus ein MIN(IF ...) AS gesamtpreis mache gibts ein #1111 - Invalid use of group function.
Mit Zitat antworten
  #4 (permalink)  
Alt 25-08-2006, 12:48
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
ORDER BY gesamtpreis ASC LIMIT 0
? so auf die schnelle

gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 25-08-2006, 13:32
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Leider nein, bekomm das "#1111 - Invalid use of group function." leider auch so nicht weg ... geht MIN überhaupt wenn der Wert berechnet wird? Da müsste mySQL erst intern eine Tabelle erstellen, sich die Werte berechnen lassen und dann entscheiden was am "günstigesten" ist.
Mit Zitat antworten
  #6 (permalink)  
Alt 25-08-2006, 13:45
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

nee jetzt ohne MIN

gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #7 (permalink)  
Alt 25-08-2006, 14:02
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Schau dir bitte nochmal den Anfangspost an, es soll ja nicht nur das günstige ausgeben werden (sonst hätte ich ja nur das LIMIT an die obere Abfrage setzt müssen) sondern es so von jeder "u_id" nur der günstige Preis ausgeben werden.

Ich erklär mal den Hintergrund ein wenig damit es deutlicher wird. Also jede Unterkunft hat mehrere Zimmer, jetzt wird eine Suchabfrage gesendet und es wird nach den günstigen Zimmer gesucht. Nun soll jede Unterkunft angezeigt werden und von dieser das günstige Zimmer, dies klappt zur Zeit leider noch nicht und so sind unter den z.B. fünf günstigen eine Unterkünfte mit ihren verschiedenen Zimmern.
Mit Zitat antworten
  #8 (permalink)  
Alt 25-08-2006, 14:05
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

ach so, jetzt verstehe ich. auf die schnelle würde ich sagen, dass du das mit php verarbeiten mußt. mit sql stößt du da, glaube ich, an die grenzen.

gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #9 (permalink)  
Alt 25-08-2006, 14:07
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wäre super wenn man es per SQL lösen könnte, mir hat damals auch jeder gesagt die Berechnung wäre nur per PHP zu lösen. Dies konnte ich zum Glück wiederlegen. Nur hier fehlt mir die Erfahrung mit temporären Tabellen ... glaub nur so ist es zu lösen, oder was sagen die SQL Experten?
Mit Zitat antworten
  #10 (permalink)  
Alt 18-09-2006, 17:26
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wegen Urlaub usw. hing das Thema leider ein wenig durch aber nun bin ich wieder zurück und hab es gleich mit temporary tables versucht zu lösen und glaub ich bin kurz dass es gelingt. Es gibt nur noch folgenden Fehler bei der SELECT Abfrage von der tmp Table.

Also folgendes klappt und gibt ein Ergebnis aus

PHP-Code:
CREATE TEMPORARY TABLE tmp (
`
uidINT UNSIGNED NOT NULL ,
`
uzidINT UNSIGNED NOT NULL ,
`
preisDOUBLE(16,2NOT NULL ,
`
verfuegbarSMALLINT NOT NULL);

INSERT INTO tmp SELECT u.u_iduz.uz_id
IF(
u.u_waehrung != 11.00 uw.uw_umrechnung,1)
* ((
uz.uz_stpreis * (ABSTO_DAYS'2006-11-16' ) - TO_DAYS'2006-11-14' )) - 
COUNTuze.uze_uzid )) + SUMuze.uze_preis )) *
IF(
u.u_kostenberechnung='Person',2,1)) AS gesamtpreisAS verfuegbar
FROM unterkunft 
AS u
LEFT JOIN verband 
AS v ON v.v_id u.u_vid
LEFT JOIN v_gebiet 
AS vg ON vg.vg_id v.v_vgid
LEFT JOIN v_gebiet_land 
AS vgl ON vgl.vgl_id vg.vg_land
LEFT JOIN u_zimmer 
AS uz ON uz.uz_uid u.u_id
LEFT JOIN u_kategorie 
AS uk ON uk.uk_id u.u_kategorie
LEFT JOIN uz_verpflegungsarten 
AS uzv ON uzv.uzv_id uz.uz_stverpflegung
LEFT JOIN uz_expreise 
AS uze ON uz.uz_id uze.uze_uzid
AND uze.uze_datum
BETWEEN 
'2006-09-18'
AND '2006-09-18'
LEFT JOIN u_waehrung AS uw ON u.u_waehrung uw.uw_id
LEFT JOIN uz_status uzs ON uz
.uz_id uzs.uzs_uzid
AND uzs.uzs_datum
BETWEEN 
'2006-09-18'
AND '2006-09-18'
WHERE (
uz.uz_personen uz.uz_abweichung
) <=5
AND uz.uz_personen >=5
GROUP BY u
.u_iduz.uz_personen
HAVING verfuegbar 
0
ORDER BY gesamtpreis
;

SELECT FROM tmp
Ergebnis:

PHP-Code:
 uid         uzid         preis         verfuegbar
3     10     32.00     0
3     9     88.00     0
2     4     180.00     0 
Doch wenn ich

PHP-Code:
SELECT FROM tmp
mit folgendem tausche

PHP-Code:
SELECT FROM tmp ORDER BY uid
gibt es diesen Fehler

PHP-Code:
Fehler

SQL
-BefehlBearbeiten

SHOW KEYS FROM

MySQL meldet
Dokumentation
#1064 - You have an error in your SQL syntax near '' at line 1 
Warum?

Ach kann mir noch kurz jemand erklären wie MySQL sicher geht dass es die Tabelle nur einmal gibt, test es dies davor? Wie heißen dann die weiteren Tabellen?

Geändert von aevo (19-09-2006 um 10:20 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 19-09-2006, 10:19
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ach die verwendete MySQL Version lautet 3.23.49. Vielleicht hilfts beim Fehler suchen. Ich hab zwar heute morgen weiter getestet und im Internet dazu gesucht, konnte aber nichts finden.

Nachtrag: Also hab nun weiter getest und ich kann alles mit der temporären Tabellen anstellen bis zu dem Punkt wenn ich GROUP BY / ORDER BY mit ins Spiel bringe. Gibts da einen bekannten Fehler?

Geändert von aevo (19-09-2006 um 11:30 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 20-09-2006, 20:39
aevo
 Newbie
Links : Onlinestatus : aevo ist offline
Registriert seit: Jul 2004
Beiträge: 21
aevo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hat keiner irgendwelche Tipps / Erfahrungen mit Temporary Tables bei der MySQL Version?

Eigentlich sollte die Geschichte doch klappen oder?
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 21:32 Uhr.