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
GELÖST

Php und mysql Zählen von Feldern die etwas enthalten

Frage Entwicklung PHP

Mitglied: dark3zz

dark3zz (Level 1) - Jetzt verbinden

13.09.2011, aktualisiert 17:20 Uhr, 3944 Aufrufe, 8 Kommentare

Versuche Tage zu zählen an denen ein Unixtime drinsteht. Kriege aber nicht die richtige Syntax heraus.

Versuche Tage zu zählen an denen ein Unixtime drinsteht. Schaffe es aber nicht.

Ausprobiert: HAVING, LIKE, ==, != etc.... Evtl, muss ich GROUP einsetzen..? Keine Ahnung

Was ich habe zählt mir: Wieviele Reihen haben in keiner der angegebenen 5 Tagen eine 'na'

Vielleicht kann mir jemand auf die Sprünge helfen, ich komme einfach nicht auf den richtigen Syntax um das Abzufragen.

Was ich habe:

die mySQL
4ecac21bb0175f6b3fd911b3bb9807bb - Klicke auf das Bild, um es zu vergrößern

Der Schnippsel
01.
// zählen der anzahl tage an welchen ein unixtime drinsteht 
02.
$sql_days = mysql_query("SELECT `sem_tag_start_01`, `sem_tag_start_02`, `sem_tag_start_03`, `sem_tag_start_04`, `sem_tag_start_05` 
03.
                        FROM `seminare`  
04.
                        WHERE (`sem_id` = '$row[sem_id]')" 
05.
                        . " AND (`sem_tag_start_01` NOT LIKE 'na')"  
06.
                        . " AND (`sem_tag_start_02` NOT LIKE 'na')"  
07.
                        . " AND (`sem_tag_start_03` NOT LIKE 'na')"  
08.
                        . " AND (`sem_tag_start_04` NOT LIKE 'na')"  
09.
                        . " AND (`sem_tag_start_05` NOT LIKE 'na')") or die(mysql_error());                
10.
 
11.
$days = mysql_num_rows($sql_days);
Dies zählt mir aber wieviele haben quasi 5 Tage ein 'na' drin........

die sem_id und $row[sem_id] stimmen. Da sondere ich das Seminar ab

Ich möchte:
- Zählen wieviele Tage das Seminar ist. Überall wo kein 'na' drinsteht, steht ein Tag drin. Diese zählen und ausgeben mit $days

Danke für Eure Hilfe/Tipps/Anregungen
Mitglied: Arano
13.09.2011 um 18:20 Uhr
Hallo,

diese Auswertung würde ich in PHP machen, etwa so:
01.
<?php 
02.
 
03.
$strQuery = "SELECT * FROM `tabel` WHERE `sem_id` =".$_GET['sem_id']." LIMIT 1"
04.
$resSelectSemi = mysql_query($strQuery); 
05.
/* 
06.
  Fehlerbehandlung, .... 
07.
*/ 
08.
$arrSeminar = mysql_fetch_assoc($resSelectSemi); 
09.
$intSeminarDauer = 0; 
10.
if('na' != $arrSeminar['sem_tag_start_01']) 
11.
12.
    ++$intSeminarDauer
13.
    if('na' != $arrSeminar['sem_tag_start_02']) 
14.
15.
        ++$intSeminarDauer
16.
        if('na' != $arrSeminar['sem_tag_start_03']) 
17.
18.
            ++$intSeminarDauer
19.
            if('na' != $arrSeminar['sem_tag_start_04']) 
20.
21.
                ++$intSeminarDauer
22.
                if('na' != $arrSeminar['sem_tag_start_05']) 
23.
24.
                    ++$intSeminarDauer
25.
                } // end if tag 5 
26.
            } // end if tag 4 
27.
        } // end if tag 3 
28.
    } // end if tag 2 
29.
} // end if tag 1 
30.
 
31.
echo 'Das Seminat mit der ID: '$_GET['sem_id'].' geht &uuml;ber '.$intSeminarDauer.' Tage.'
32.
?>
Jaa.... nicht so schön die ganze Verschachtellung aber simpel.


~Arano
Bitte warten ..
Mitglied: Biber
13.09.2011 um 18:46 Uhr
Moin Arano,

ich dagegen würde den Quatsch eher mit SQL statt PHP abfackeln
01.
   SELECT Sem_id, 
02.
  ( IF(  sem_tag_start_01 = 'na', 0 , 1)  
03.
  +IF(  sem_tag_start_02 = 'na', 0 , 1)  
04.
  +IF(  sem_tag_start_03 = 'na', 0 , 1)  
05.
  +IF(  sem_tag_start_04 = 'na', 0 , 1)  
06.
  +IF(  sem_tag_start_05 = 'na', 0 , 1) ) as SemDauer 
07.
                       FROM seminare  
08.
    Where Sem_id = ???
Grüße
Biber

[Edit] In mySQL heisst es IF() und nicht IIF(); siehe Aranos Kommentar unten, [/Edit]
Bitte warten ..
Mitglied: dark3zz
13.09.2011 um 19:29 Uhr
hei Arano, hei Biber.

danke fuer eure tipps. hammer!

Aranos Vorschlag auf Anhieb kapiert hochzaehlen mit +1 falls er keine na findet, gute variante. die probiere ich morgen gleich aus....
anstatt des GETs benutze ich das $row[sem_id] weil ich ja oben, nicht sichtbar hier, eine abfrage ueber die ganze seminar tabelle habe


Bibers vorschlag kapier ich nicht ganz. ist es die gleiche variante mit hochzaehlen aber per sql direkt oder? hmm, mir eher fremd so mit mySQL umzuspringen
Bitte warten ..
Mitglied: Arano
13.09.2011 um 19:53 Uhr
Hi

Naja, ich hatte das ja auch einfach mal schnell hin getippelt und deswegen die Variable $_GET anstelle von $row verwendet.

Allerdings hat Biber da schon recht, es eher von der Datenbank erledigen zu lassen - allerdings wusste ich bis eben selber nicht wie
Wobei das auch ganz einfach ist - wie ich jetzt sehe !

Es wird für jede gefunden Zeile geprüft ob ein Tag "na" enthält, dann wird dafür eine "0" "gelesen" andernfalls eine "1"
Das zu diesem "Zwischenergebnis" führen kann:
01.
   SELECT Sem_id,  
02.
  ( 1 
03.
  +1 
04.
  +1 
05.
  +0 
06.
  +0 ) as SemDauer  
07.
                       FROM seminare   
08.
    Where Sem_id = ???
Das wird ausgerechnet und ergibt so eine 3 die als Feld "SemDauer" ausgelesen werden kann - quasi: $row['SemDauer'] = 3

Hm... kommt IIF() nicht aus Access und müsste es für MySQL nich einfach IF() heissen !?


~Arano
Bitte warten ..
Mitglied: Biber
13.09.2011 um 20:12 Uhr
Uuups, Arano,

Hm... kommt IIF() nicht aus Access und müsste es für MySQL nich einfach IF() heissen !?
Jepp, natürlich - in mySQL ist es "IF()" und nicht "IIF()".

ich korrigiere es oben.

Grüße
Biber
Bitte warten ..
Mitglied: dark3zz
13.09.2011 um 20:47 Uhr
cool, danke fuer eure hilfe. bin noch bei weitem kein guru, man lernt ja nie aus

aber mit php oder mysql das zu loesen bringt keine vorteille oder......ich probier mal eide varianten aus. die mysql direkt variante scheint ein paar linien weniger zu haben. aus performance gruenden ist es egal. das script ist nicht oeffentlich.....
Bitte warten ..
Mitglied: Biber
13.09.2011 um 21:37 Uhr
Moin dark3zz,

...aus performance gruenden ist es egal. ...

Ja nee... der Unterschied kommt eher bei der Massenverarbeitung von "vielen" Datensätzen.

In dem vereinfachten Beispiel macht es KEINEN Unterschied, weil
  • es wird EINE Sem_ID abgefragt - und Sem_iD ist der primary key und sicherlich mit einem Index versehen - geht fix.
  • auf den EINEN Datensatz wird bei Arano ein mysql_fetch_assoc($resSelectSemi) gemacht, der Rest geht schnell im Hauptspeicher des Clients
  • mit SQL geht es bei dem EINEN Datensatz genauso schnell beim impliziten FETCH im Hauptspeicher des DB-Servers

Wenn du aber ALLE Datensätze durchpflügst, weil du z.B. alle Seminare mit mehr als 2 Tagen Dauer oder auch nur die mit mehr als 0 Tagen Dauer brauchst....

Dann musst du mit der PHP-Variante jeden gatesverdammten Datensatz auf dem schmächtigen Client durchFETCHen.
Bei der SQL-Varianten gehen aber ggf. nur die verbleibenden Datensätze ( "WHERE SemDauer > 2" oder "WHERE SemDauer > 0") über die Leitung - den Rest macht der DB-Server.

Umgekehrt allerdings - falls deine Haupt-Anwendung sein wird, EINE bestimmte Sem_id gezielt anzuschauen und keinerlei Monats-, Quartals oder Jahresauswertungen gebraucht werden....
--> dann nimm die Variante, die du besser nachvollziehen, lesen und ggf. anpassen kannst.

Grüße
Biber
Bitte warten ..
Mitglied: dark3zz
14.09.2011 um 10:04 Uhr
Hoied.

Also ich habe die PHP Variante gewählt. Die mySQL direkt Variante hat bei mir nicht gefruchtet....aus welchen Gründen auch immer. Aber in Zukunft werde ich mich mehr mit mySQL befassen, wenn vieles auch direkt geht

Thanks, Problem gelöst und viele Stunden gespart!
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Excel Feld mit Zahlen formaiteren
gelöst Frage von killtecMicrosoft Office6 Kommentare

Hallo, ich möchte in Excel eine Zahl formatieren. Es soll nach dem Muster sein: 1-12345-12345-123456789-1 Wie bekomme ich denn ...

Batch & Shell
Herausfinden ob Ordner einer Unterebene eine Zahl enthält
gelöst Frage von StefanK007Batch & Shell4 Kommentare

Hallo, ich habe ein Verzeichnis "D:\Kunden" mit sehr vielen Unterverzeichnissen welche aus 6-8stelligen Zahlen (Kundennummern) bestehen. In diesen Verzeichnissen ...

Datenbanken
MySQL - Feld aus anderer Tabelle hinzusummieren?
gelöst Frage von 1410640014Datenbanken5 Kommentare

Hallo, habe ein banales Problem und bin leider mit JOINS nicht gut bewandert. zwei simple Lagertabellen mit den Felder: ...

PHP
PHP Umstellung mysql connect
Frage von DPiegzaPHP7 Kommentare

Hallo zusammen. Ich bekomme immer diese Fehlermeldung / Warnung: Deprecated: mysql_connect(): The mysql extension is deprecated and will be ...

Neue Wissensbeiträge
Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 8 StundenInternet3 Kommentare

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

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 15 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 TagWindows 104 Kommentare

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 1 TagSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless18 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 ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

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 ...