
88871
13.09.2011, aktualisiert um 17:20:29 Uhr
Php und mysql Zählen von Feldern die etwas enthalten
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
Der Schnippsel
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
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
Der Schnippsel
// zählen der anzahl tage an welchen ein unixtime drinsteht
$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`
FROM `seminare`
WHERE (`sem_id` = '$row[sem_id]')"
. " AND (`sem_tag_start_01` NOT LIKE 'na')"
. " AND (`sem_tag_start_02` NOT LIKE 'na')"
. " AND (`sem_tag_start_03` NOT LIKE 'na')"
. " AND (`sem_tag_start_04` NOT LIKE 'na')"
. " AND (`sem_tag_start_05` NOT LIKE 'na')") or die(mysql_error());
$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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 173045
Url: https://administrator.de/forum/php-und-mysql-zaehlen-von-feldern-die-etwas-enthalten-173045.html
Ausgedruckt am: 08.04.2025 um 00:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
diese Auswertung würde ich in PHP machen, etwa so:
Jaa.... nicht so schön die ganze Verschachtellung aber simpel.
~Arano
diese Auswertung würde ich in PHP machen, etwa so:
<?php
$strQuery = "SELECT * FROM `tabel` WHERE `sem_id` =".$_GET['sem_id']." LIMIT 1";
$resSelectSemi = mysql_query($strQuery);
/*
Fehlerbehandlung, ....
*/
$arrSeminar = mysql_fetch_assoc($resSelectSemi);
$intSeminarDauer = 0;
if('na' != $arrSeminar['sem_tag_start_01'])
{
++$intSeminarDauer;
if('na' != $arrSeminar['sem_tag_start_02'])
{
++$intSeminarDauer;
if('na' != $arrSeminar['sem_tag_start_03'])
{
++$intSeminarDauer;
if('na' != $arrSeminar['sem_tag_start_04'])
{
++$intSeminarDauer;
if('na' != $arrSeminar['sem_tag_start_05'])
{
++$intSeminarDauer;
} // end if tag 5
} // end if tag 4
} // end if tag 3
} // end if tag 2
} // end if tag 1
echo 'Das Seminat mit der ID: '$_GET['sem_id'].' geht über '.$intSeminarDauer.' Tage.';
?>
Jaa.... nicht so schön die ganze Verschachtellung aber simpel.
~Arano
Moin Arano,
ich dagegen würde den Quatsch eher mit SQL statt PHP abfackeln
Grüße
Biber
[Edit] In mySQL heisst es IF() und nicht IIF(); siehe Aranos Kommentar unten, [/Edit]
ich dagegen würde den Quatsch eher mit SQL statt PHP abfackeln
SELECT Sem_id,
( IF( sem_tag_start_01 = 'na', 0 , 1)
+IF( sem_tag_start_02 = 'na', 0 , 1)
+IF( sem_tag_start_03 = 'na', 0 , 1)
+IF( sem_tag_start_04 = 'na', 0 , 1)
+IF( sem_tag_start_05 = 'na', 0 , 1) ) as SemDauer
FROM seminare
Where Sem_id = ???
Grüße
Biber
[Edit] In mySQL heisst es IF() und nicht IIF(); siehe Aranos Kommentar unten, [/Edit]
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:
Das wird ausgerechnet und ergibt so eine 3 die als Feld "SemDauer" ausgelesen werden kann - quasi:
Hm... kommt IIF() nicht aus Access und müsste es für MySQL nich einfach IF() heissen !?
~Arano
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:
SELECT Sem_id,
( 1
+1
+1
+0
+0 ) as SemDauer
FROM seminare
Where Sem_id = ???
$row['SemDauer'] = 3
Hm... kommt IIF() nicht aus Access und müsste es für MySQL nich einfach IF() heissen !?
~Arano
Moin dark3zz,
Ja nee... der Unterschied kommt eher bei der Massenverarbeitung von "vielen" Datensätzen.
In dem vereinfachten Beispiel macht es KEINEN Unterschied, weil
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
...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