Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MySQL - In der Zeile multiplizieren wenn...

Frage Entwicklung Datenbanken

Mitglied: EvilMoe

EvilMoe (Level 2) - Jetzt verbinden

09.08.2008, aktualisiert 11.08.2008, 6034 Aufrufe, 7 Kommentare

Hallo

Ich stecke gerade bei eine SQL Abfrage fest.

01.
 
02.
SELECT COUNT(imgID) as anz, images.id, images.server as server, fsize_image, fsize_thumb,views.form  
03.
 
04.
FROM views, images, server 
05.
 
06.
WHERE images.id = imgID 
07.
 
08.
GROUP BY images.id 
09.
 
10.
 
Diese Abfrage liefert ein Ergebnis wie:
0d7020aa04d8bdfc5a26ade7c04fee40-unbenannt - Klicke auf das Bild, um es zu vergrößern


Das Ergebnis ist auch gut. Nun möchte ich allerding "anz" mit "fsize_image" oder "fsize_thumb" muliplizieren je nachdem was bei "form" steht. Wie macht man das?
Mitglied: Biber
09.08.2008 um 19:03 Uhr
Moin EvilMoe,

versuche es so:
01.
SELECT COUNT(imgID) as anz, images.id, images.server as server,  
02.
fsize_image, fsize_thumb,views.form, 
03.
CASE when view.form = 'image' then fsize_image * Count(imgID) 
04.
CASE when view.form = 'thumb' then fsize_thumb * Count(imgID) 
05.
Else 0 
06.
End CASE as WholeFSize 
07.
 
08.
FROM views, images, server 
09.
WHERE images.id = imgID 
10.
GROUP BY images.id
Grüße
Biber
[Wobei ich nur die CASE-Mimik hier einbauen wollte.
Die Query selbst ist mir nicht klar (auch nicht, warum sie funktioniert). Wozu wird die Tabelle "server" angefasst?
In welche Tabelle stehen die "fsize_*"-Felder?]

[Edit] Tippfehlerkorrektur "End CASE as WholeFSize" siehe unten. [/Edit]
Bitte warten ..
Mitglied: EvilMoe
09.08.2008 um 19:24 Uhr
Abend,

in den "Case" Anweisungen müsste es "views" heißen, aber da sist ja nebensache. Ich erhalte trotzdem einen SQL Syntax Fehler.

01.
 
02.
SELECT COUNT(imgID) as anz, images.id, images.server as server,  
03.
fsize_image, fsize_thumb,views.form, 
04.
CASE when views.form = 'image' then fsize_image * Count(imgID) 
05.
CASE when views.form = 'thumb' then fsize_thumb * Count(imgID) 
06.
Else 0 
07.
End as WholeFSize 
08.
 
09.
FROM views, images 
10.
WHERE images.id = imgID 
11.
GROUP BY images.id 
12.
 
PS: Stimmt, die Tabelle "server" brauche ich gar nicht weil ich die "serverID" aus der Tabelle von "images" hole. Hab’s bei mir auch gleich entfernt.

Die "fsize_*" Felder befinden sich in der "image" Tabelle.


Warum ist der Query nicht klar? Hab ich einen Denkfehler? Ich sag einfach mal worum es geht vielleicht wird’s dann klarer was ich erreichen möchte.


Ich habe 3 Tabellen. "images, server, views"

In "server" befinden sich Daten zu einzelnen Hosts die ich aber hierfür nicht brauche. In "images" sind alle Daten der Bilder erfasst die dort gespeichert sind. Und "views" sind alle aufrufe der Bilder gespeichert.

Nun möchte ich dadurch erreichen das meine Hosts "gleichmäßig" belastet werden. Darum wollte ich aus den „views“ die verbrauchte Bandbreite der letzten Stunde errechnen und sortieren damit die neuen Bilder auf den Host kommen der am wenigsten ausgelastet ist.

Ich das vorhaben überhaupt so richtig? Oder gibt es dafür vielleicht sogar eine elegantere Methode um die Last (Bandbreite) zu verteilen?
Bitte warten ..
Mitglied: Biber
09.08.2008 um 19:31 Uhr
Moin EvilMoe,

okay, der Syntaxfehler kommt sicherlich, weil mySQL am Ende der CASE-Anweisung ein "END CASE" erwartet und nicht nur ein "END".

Sorry für die Flüchtigkeitsfehler.

Grüße
Biber
Bitte warten ..
Mitglied: EvilMoe
09.08.2008 um 19:39 Uhr
Nee klappt trotzdem nicht.


Fehler:
01.
 MySQL meldet: Dokumentation 
02.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE when views . form = 'thumb' then fsize_thumb * Count( imgID )  Else 0  End ' at line 1 
03.
 
Hast du dir mein Vorhaben durchgelesen und könnte man das so machen?
Bitte warten ..
Mitglied: Biber
09.08.2008 um 19:53 Uhr
Moin EvilMoe,

menno, ich lass jetzt mal besser die Finger von der Tastatur...*grmpf*

Ich habe es jetzt nun doch mal nachgelesen im Handbuch und die Syntax ist nun noch anders....

Aber da ich es selber nicht Testen kann, ist es eventuell besser, Du tippst es selbst ab...?

Zum Vorhaben kann ich nichts sagen, weil...
entweder habe ich eine Denkblockade oder die Anz (Anzahl der Images) ist vollkommen irrelevant. IMHO steht die Gesamtgröße (die fsize_*'s) doch in der Images-Tabelle... und dort sollte images.id doch der PK sein.... und von daher ist auch die Multiplikation mit einer Image-Anzahl Bullshit....

Ich mach mal Pause und überlasse den anderen das Feld..

Sorry
Biber
Bitte warten ..
Mitglied: EvilMoe
09.08.2008 um 20:06 Uhr
"Anz" ist nicht die Anzahl der Bilder sondern die Anzahl der aufrufe des Bildes.

Habe mir die Doku angeguckt und nun schauts so aus (noch leicht verändert).

Jetzt nur noch "eine Kleinigkeit". Wie kann ich jetzt alles zusammenfassen? Also das ich nur noch einmal "server" mit der "id" 1 vorkommt aber die errechneten Werte (WholeFsize) addiert werden. Und die Server die garnicht vorkommen (brauche doch noch die Tabelle "server") ganz vorne stehen (ORDER BY WholeFsize). Das ist doch wieder was mit "LEFT JOIN" oder?

01.
SELECT images.id, images.server as server, 
02.
CASE when views.form = 'image' then fsize_image * Count(imgID) 
03.
Else fsize_thumb * Count(imgID) 
04.
End as WholeFSize 
05.
 
06.
FROM views, images 
07.
WHERE images.id = imgID 
08.
GROUP BY images.id
Bitte warten ..
Mitglied: Biber
11.08.2008 um 06:51 Uhr
Moin EvilMoe,
"Anz" ist nicht die Anzahl der Bilder sondern die Anzahl der aufrufe des Bildes.
*sichvornKoppKlatsch*... das meinte ich mit Denkblockade...
Okay, jetzt macht es etwas mehr Sinn...

Angenommen, in der Tabelle "server" gibt es auch ein Feld "id", dessen Wert wiederum dem Feld "server" der images-Tabelle entspricht..

Ich würde Abfrage aus Gründen der Übersichtlichkeit und Peeformance statt mit LEFT JOIN eher mit UNION machen.
Ich nehme es ungern in Kauf, wenn bei einem LEFT JOIN natürlicherweise auch Felder NULL sein können und in irgendeiner CASE-Anweisung dann diese NULL-Felder miteinander multiplziert werden...in so einem fipsigen Statement wie Deinem findet man/frau sowas ja noch schnell, aber in längeren Statements sollte so etwas zumindest nicht schon im ersten Entwurf hingenommen werden.

01.
Select * from ( 
02.
SELECT  
03.
i.server as server,  
04.
i.id as imageid,  
05.
CASE WHEN v.form = 'image'  
06.
         THEN i.fsize_image * Count(v.imgID) 
07.
         ELSE i.fsize_thumb * Count(v.imgID) 
08.
End as WholeFSize 
09.
FROM views v, images i 
10.
WHERE i.id = v.imgID 
11.
GROUP BY i.id 
12.
union  
13.
select server.id as server, NULL as imageid, NULL as Wholesize 
14.
from server 
15.
WHERE Server.id not in (select distinct Server from images) 
16.
17.
order by server
[wie immer ungetestet runtergetippt]
Die "AS server", "AD imageid" usw sind überflüssig bzw nur für die Les- und Wartbarkeit.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Datenbanken
MySQL Zeilen per Script einfügen
gelöst Frage von SpeakerSTDatenbanken3 Kommentare

Hey Leute ich hoffe mir kann jemand helfen. Ich muss in einer vorhandenen Datenbank User einfügen Die Tablle sieht ...

Datenbanken
MySQL Trigger - Zählen von Zeilen (Count) und "Überwachen" einer Spalte
Frage von Oli-nuxDatenbanken3 Kommentare

Hallo, habe ein Problem und kann es leider selber mit MySQL Trigger nicht lösen. In der MySQL-DB bzw. in ...

Microsoft Office
Aktive Zelle mit festem Bezug multiplizieren und ausgeben (Formel)
gelöst Frage von mreskeMicrosoft Office7 Kommentare

Hallo, ich habe eine Liste von Liefermengen in einer Spalte. in der Zelle B2 steht der Preis. Wie könnte ...

Microsoft Office
Excel Zeilen in eine Zeile anzeigen
gelöst Frage von rw72Microsoft Office2 Kommentare

Hallo, ich habe eine Excel Tabelle mit dem Aufbau Nummer Text 0000001 Test2 0000001 Test1 0000002 Titel 0000002 Titel2 ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 6 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 11 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 11 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 23 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...