mysqli query op substring in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java Developer / Overheid / Complexiteit

Functieomschrijving Wil jij als Java Developer een bijdrage leveren aan een veiliger Nederland en je als Java Developer bezig houden met zeer complexe bedrijfskritische applicaties? Lees dan snel verder! Doorontwikkelen bedrijfskritische applicaties; Aanpassingen maken in de bestaande applicatie; Vertalen van jouw visie op continuous integration en continuous delivery; Debuggen van de applicatie; In gesprek gaan met eindgebruikers om verbetervoorstellen op te halen. Functie-eisen Minimaal HBO-werk en denkniveau; Minimaal 5 jaar werkervaring als Java Developer; Je bent minimaal OCP-Java SE 6 gercertificeerd; Je hebt kennis van Webservices en Continuous Integration; Je bent analytisch sterk en zowel klant- als resultaatgericht. Bedrijfsomschrijving Binnen

Bekijk vacature »

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Front-end Developer Vue.js Meewerkend voorman

Functieomschrijving Ben jij een ervaren Front-end Developer, bedreven in Vue.js en lijkt het jou gaaf om als meewerkend voorman verantwoordelijk te zijn voor de ontwikkeling van drie junior ontwikkelaars? Werk jij graag aan diverse projecten t.b.v. het vergroten van klant- en medewerkerbeleving? Lee dan snel verder! Het onderhouden, ontwikkelen en testen van front-end software van diverse klant- en medewerkersapplicaties; Het ontwikkelen van maatwerk front-end oplossingen in Vue.js en participeren in een scrumteam; Verantwoordelijk voor het begeleiden en coachen van drie junior front-end developers; Verantwoordelijk voor code-reviews en het opstellen van de juiste documentatie zoals userstories en api ontwerp; Participeren in

Bekijk vacature »

Peter Kroonenburg

Peter Kroonenburg

22/11/2019 11:41:13
Quote Anchor link
Query op substring

Ik heb een datetime veld genaamd ‘meetmoment’ Ik wil nu een selectie maken op basis van dit veld maar alleen van het tijdstip in het veld.
BV alle records van 13.00 uur.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$tijd
='13.00';

$query ="SELECT meetmoment, ID ";
$query .="FROM suiker ";
$query .=WHERE SUBSTR(meetmoment,10,6) = $tijd   ";
?>


Dit werkt niet. Kan iemand aangeven wat ik hier fout doe?

Bedankt,
Peter
Gewijzigd op 22/11/2019 23:00:39 door - Ariën -
 
PHP hulp

PHP hulp

05/08/2020 09:26:37
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2019 13:48:40
Quote Anchor link
Hoe luidt de definitie van de meetmoment-kolom?
En weet je zeker dat je de goede lengte en startpositie te pakken hebt?

Als dit een DATETIME is, dan is het formaat yyyy-mm-dd hh:ii:ss.

Bij functies als substring begin je te tellen vanaf 1, dus dit zou dan (aangenomen dat het een DATETIME betreft) SUBSTR(meetmoment, 12, 8) of simpelweg SUBSTR(meetmoment, 12) moeten zijn.

En omdat het een string betreft zou de waarde $tijd tussen quotes moeten staan.

En als tijd (apart) interessant is dan loont het misschien de moeite om de informatie in twee aparte kolommen op te slaan.

Voer de query eens uit met de SUBSTR() in je SELECT, dan kun je zien wat je terugkrijgt. En je zou mysqli_errorno() kunnen inspecteren. Als deze verschilt van 0, of als de query zelf FALSE retourneert dan wil dit zeggen dat deze syntactisch niet klopt.
Gewijzigd op 22/11/2019 14:17:02 door Thomas van den Heuvel
 
Ivo P

Ivo P

22/11/2019 14:23:49
Quote Anchor link
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

en dan met name https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_time

de functie (in mysql) genaamd TIME() lijkt me wel handig om een tijd te extracten uit een datetime veld.

Met een beetje geluk pakt mysql daar ook direct wat logica in mee, zodat hij niet eerst al je 15.000 records moet bewerken (substr) om uit te vinden welke records in aanmerking komen.
 
Peter van Kroonenburg

Peter van Kroonenburg

22/11/2019 14:52:23
Quote Anchor link
Thomas,
Bij mij geeft dit het resultaat
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<td><?PHP echo substr($row_rs_query["meetmoment"],11,5)?></td>


Tijd 13:00 17:48 23:05 08:15 11:50 16:55 23:59 08:41 12:50 17:24 23:58 08:30 10:01 10:01 12:47

Dus start op 11
Gewijzigd op 22/11/2019 22:59:23 door - Ariën -
 
Michael -

Michael -

22/11/2019 14:59:24
Quote Anchor link
Ik zal ook kiezen voor een ingebouwde functie zoals Ivo zegt. Alleen het nadeel van TIME() is dat je zowel uur,minuten als seconden en evt. miliseconden krijgt. Gebruik dan HOUR() en MINUTE() of DATE_FORMAT(datetime, "%H:%i") om je tijd te vergelijken. Dit zal na verwachting sneller gaan dan met SUBSTR.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2019 15:35:44
Quote Anchor link
Dan is de kolom waarschijnlijk geen DATETIME kolom? Hoe luidt de definitie van deze kolom en hoe ziet een complete waarde in zo'n kolom er uit?

En ja, TIME is wss beter (als het een DATETIME was) of dus gewoon opslaan in een aparte (tijds)kolom.
 
Ivo P

Ivo P

22/11/2019 15:57:41
Quote Anchor link
Peter van Kroonenburg op 22/11/2019 14:52:23:
Thomas,
Bij mij geeft dit het resultaat
<td>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?PHP echo substr($row_rs_query["meetmoment"],11,5)?>
</td>

Tijd 13:00 17:48 23:05 08:15 11:50 16:55 23:59 08:41 12:50 17:24 23:58 08:30 10:01 10:01 12:47

Dus start op 11


dat is de php functie substr();

Mysql's substring functie is anders en begint bij 1 te tellen

Toevoeging op 22/11/2019 15:58:38:

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substr
 
Adoptive Solution

Adoptive Solution

22/11/2019 16:01:57
Quote Anchor link
Helpt dit?

WHERE time(meetmoment) = $tijd

Maak van tijd '13:00:00'
Gewijzigd op 22/11/2019 16:05:43 door Adoptive Solution
 
Peter van Kroonenburg

Peter van Kroonenburg

22/11/2019 22:54:06
Quote Anchor link
Helaas, ook onderstaande versie geeft geen resultaat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$tijd
='13.00.00';
$query  ="SELECT * ";
$query .="FROM suiker ";
$query .="WHERE time(meetmoment) = '$tijd'  ";

$rs_query = mysqli_query($verbinding,$query) or die($mysqli_error($verbinding));
$row_rs_query = mysqli_fetch_assoc($rs_query);
$totalRows_rs_query= mysqli_num_rows($rs_query); ?>

<tbody>
    <tr>        
        <td bgcolor="#ccc">Tijd</td>
    </tr>
    
    <tr>      
    <?PHP do {     ?>
        <td><?PHP echo substr($row_rs_query["meetmoment"],11,5)?></td>
    </tr>
</tbody>    
</table>

<?PHP } while ($row_rs_query = mysqli_fetch_assoc($rs_query));
exit();
?>


Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 22/11/2019 23:00:24 door - Ariën -
 
- SanThe -

- SanThe -

22/11/2019 22:59:30
Quote Anchor link
Adoptive Solution op 22/11/2019 16:01:57:
Maak van tijd '13:00:00'

Peter van Kroonenburg op 22/11/2019 22:54:06:
$tijd='13.00.00';


Dit is niet hetzelfde.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2019 23:06:09
Quote Anchor link
En als meetmoment een DATETIME is dan zou ik dat ook niet als string behandelen, maar meer als een timestamp. In PHP heb je hier de DateTime klasse voor. Misschien wat omslachtiger, maar het werkt, en het beschrijft beter wat voor type data je gebruikt, niet simpelweg een string, maar een (datum)tijd.

Of je voert de conversie meteen uit aan de MySQL-zijde door SELECT *, TIME(meetmoment) AS tijd te gebruiken. Dan kun je simpelweg $row_rs_query['tijd'] gebruiken.
 
Peter van Kroonenburg

Peter van Kroonenburg

22/11/2019 23:46:30
Quote Anchor link
Opgelost!!

Met de laatste tip, alleen had ik nog een foutje gemaakt 13.00.00 ipv 13:00:00. Te lang achter het scherm gezeten waarschijnlijk.
Bedankt allen voor de hulp.
Fijn weekend.
Peter
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.