Avatar billede kodak Mester
12. juni 2014 - 12:28 Der er 53 kommentarer

Mysql vis en

jeg vil gerne have vist

den sidste af hver 'han_unit_id' hvor 'han_unit_type' == ' resource_temperature'

så hvis tabeller ser således ud:

id - name - han_unit_id - han_unit_type - time
34 - noget - 50345 - resource_temperature - 1402566736
33 - noget - 45892 - airlink_input - 1402566613
32 - noget - 37493 - resource_temperature - 1402566651
31 - noget - 50345 - resource_temperature - 1402566565

så vil jeg kun have udlæst 34 & 32
Avatar billede jakobdo Ekspert
12. juni 2014 - 13:08 #1
Hvorfor vil du ikke have 31 ud ?
Forstår nok ikke problemet eller dit ønske. :o)
Avatar billede kodak Mester
12. juni 2014 - 13:15 #2
fordi 31 har fået en nyere verdi (34) sammen han_init_id.
Avatar billede jakobdo Ekspert
12. juni 2014 - 13:24 #3
Utestet, men hvad med noget ala:

SELECT id, han_unit_id, MAX(time) FROM table WHERE 'han_unit_type' = 'resource_temperature' GROUP BY han_unit_id, ORDER BY time
Avatar billede kodak Mester
12. juni 2014 - 13:52 #4
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /volume1/web/Blue_Captain/apps/templine.php on line 19


line 5: $result_templine = mysql_query("SELECT id, han_unit_title, output_sand_time, han_unit_id, MAX(time) FROM `input_module` WHERE 'han_unit_type' = 'resource_temperature' GROUP BY han_unit_id, ORDER BY time");

line 19: while($row = mysql_fetch_array($result_templine)) {
line 20:     echo "['".$row['han_unit_title']."', '".$row['output_sand_time'].",\n      ";
line 21}
Avatar billede jakobdo Ekspert
12. juni 2014 - 13:57 #5
Test lige:

$result = mysql_query("SELECT id, han_unit_title, output_sand_time, han_unit_id, MAX(time) FROM `input_module` WHERE 'han_unit_type' = 'resource_temperature' GROUP BY han_unit_id, ORDER BY time");
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_array($result)) {
  echo "['".$row['han_unit_title']."', '".$row['output_sand_time'].",\n      ";
}
Avatar billede kodak Mester
12. juni 2014 - 16:00 #6
Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ORDER BY time' at line 1
Avatar billede conz Juniormester
12. juni 2014 - 17:13 #7
Det er et komma lige før ORDER BY.
Avatar billede kodak Mester
12. juni 2014 - 17:33 #8
godt set,

nu virker den men sidens øvrige indhold vil ikke lade den vise åbenbart men opgaven er løst.
Avatar billede kodak Mester
12. juni 2014 - 17:56 #9
eller nej er ikke løst
den vise et en af de rows der er inde midt i det hele
Avatar billede jakobdo Ekspert
12. juni 2014 - 20:11 #10
Jeg har desværre nok taget fejl så. Vent til Arne_V kommer med svaret. :o)
Avatar billede kodak Mester
12. juni 2014 - 20:34 #11
haha
Avatar billede jantzen88 Nybegynder
12. juni 2014 - 22:26 #12
#3's svar burde virke, hvis man lige fjerner det komma der er før ORDER BY

SELECT id, han_unit_id, MAX(time) FROM table WHERE han_unit_type = 'resource_temperature' GROUP BY han_unit_id ORDER BY time

id han_unit_id MAX(time)
32 37493 1402566651
34 50345 1402566736
Avatar billede kodak Mester
12. juni 2014 - 23:59 #13
Desvære virker det ikke
de tal jeg har i min db som jeg sortere efter time

passer ikke med dem der kommer ud.
Avatar billede jakobdo Ekspert
13. juni 2014 - 07:51 #14
Kan du smide et dump af din db et sted, så vil jeg gerne lege lidt videre.
Avatar billede kodak Mester
13. juni 2014 - 09:51 #15
Avatar billede jakobdo Ekspert
13. juni 2014 - 10:17 #16
Hvad med noget ala denne:

SELECT MAX(id),`han_unit_id` FROM `input_module` WHERE `han_unit_type` = 'resource_temperature' GROUP BY `han_unit_id`
Avatar billede kodak Mester
13. juni 2014 - 10:46 #17
det er som om den der MAX() ikke gør helt hvad den skal

['Løs', 9.800], //104
      ['Tavlen', 25.700], //102


det sidste efter // er id tænkte det var meget godt at få det med.

jeg vil mene at det skal være omkring 700
Avatar billede jakobdo Ekspert
13. juni 2014 - 11:04 #18
Følgende sql:
SELECT MAX( id ) ,  `han_unit_id`
FROM  `input_module`
WHERE  `han_unit_type` =  'resource_temperature'
GROUP BY  `han_unit_id`

Giver mig dette resultat:

id: 739
han_unit_id: 565268
og
id: 741
han_unit_id: 567316

Hvad er det rigtige resultat da?
Og bruger du mysql eller MariaDB?
Avatar billede kodak Mester
13. juni 2014 - 11:10 #19
SELECT MAX( id ) , han_unit_title, han_last_pos, id,`han_unit_id`
FROM  `input_module`
WHERE  `han_unit_type` =  'resource_temperature'
GROUP BY  `han_unit_id`

giver stadig mig:

['Løs', 9.800], //104
['Tavlen', 25.700], //102

dit resultat ser korrekt ud men hvorfor får jeg ikke det samme?
Avatar billede jakobdo Ekspert
13. juni 2014 - 11:15 #20
Hvilken database bruger du?
Og hvilken version?
Avatar billede kodak Mester
13. juni 2014 - 11:21 #21
kan jeg svare på om ikke så længe er lige ved at genstarte server.
Avatar billede kodak Mester
13. juni 2014 - 11:35 #22
MariaDB 5.5.34-0018
phpMyAdmin 4.1.14_0017
Avatar billede jakobdo Ekspert
13. juni 2014 - 11:42 #23
Prøv lige at leg lidt med MAX. :o)

https://mariadb.com/kb/en/max/

Og se om den i sin simpleste forstand giver forventet resultat.
Prøv evt. at undlad WHERE.
Avatar billede kodak Mester
13. juni 2014 - 11:52 #24
uden WHERE får jeg
Warning: number_format() expects parameter 1 to be double, string given in /volume1/web/Blue_Captain/apps/templine.php on line 23
['Venstre', ], //73
     
Warning: number_format() expects parameter 1 to be double, string given in /volume1/web/Blue_Captain/apps/templine.php on line 23
['Højre', ], //69
      ['Løs', 9.800], //104
      ['Tavlen', 25.700], //102
     
Warning: number_format() expects parameter 1 to be double, string given in /volume1/web/Blue_Captain/apps/templine.php on line 23
['Lys skab', ], //72


Men resultatet er stadig det samme.
Avatar billede jakobdo Ekspert
13. juni 2014 - 11:56 #25
Kan du ikke teste direkte i phpmyadmin ?

Hvad giver denne:

SELECT MAX( id ) , han_unit_title, han_last_pos, id,`han_unit_id`
FROM  `input_module`
GROUP BY  `han_unit_id`
Avatar billede jakobdo Ekspert
13. juni 2014 - 11:56 #26
Jeg får dette svar:
MAX( id )    han_unit_title    han_last_pos    id    han_unit_id
105    Venstre    falsk    73    320092
572    Højre    falsk    69    320348
739    Løs    9.8000001907349    104    565268
741    Tavlen    25.700000762939    102    567316
664    Lys skab    falsk    72    58642
Avatar billede kodak Mester
13. juni 2014 - 12:00 #27
ligemeget hvad jeg bruger i MAX får jeg det samme resultat.
Avatar billede jakobdo Ekspert
13. juni 2014 - 12:05 #28
Så er det MariaDB der er fucked i forhold til MAX.
Avatar billede kodak Mester
13. juni 2014 - 12:10 #29
['han_unit_title', han_last_pos], //id //MAX( id )
['Løs', 9.800], //104 //763
['Tavlen', 25.700], //102 //762


Bliver MAX så ikke brugt forkert (Skal den ikke bruges i WHERE)

så passer det.
Avatar billede kodak Mester
13. juni 2014 - 12:52 #30
Jeg tror du har ret MAX er rimelig fucked
har lige tjekket op på en tutorial hmor der var sat et eksempel
men min gør slet ikke det samme.
Avatar billede jakobdo Ekspert
13. juni 2014 - 12:56 #31
Jeg tror desværre ikke jeg kan komme nærmere en løsning, beklager.
Avatar billede kodak Mester
13. juni 2014 - 13:12 #32
Jeg har vist fundet denne:

SELECT han_unit_title, han_last_pos, han_unit_id, max_id FROM input_module JOIN (SELECT han_unit_id, MAX(id) AS max_id from input_module group by han_unit_id) AS aggregated_table
USING (han_unit_id)
WHERE (id = max_id) AND han_unit_type =  'resource_temperature'


Den er lidt voldsom.

virker den for dig?
Avatar billede jakobdo Ekspert
13. juni 2014 - 13:17 #33
Jeg får dette "svar":

han_unit_title    han_last_pos    han_unit_id    max_id
Løs    25    565268    739
Tavlen    27.60000038147    567316    741
Avatar billede kodak Mester
13. juni 2014 - 13:26 #34
Dit svar på den gamle var:

han_unit_title    han_last_pos    id    han_unit_id    MAX( id )
Løs    9.8000001907349    104    565268    739
Tavlen    25.700000762939    102    567316    741

og som du selv ser på din gamle stemmer id og id Max ikke over ens
Avatar billede kodak Mester
13. juni 2014 - 13:31 #35
han_unit_title    han_last_pos    id    han_unit_id
Løs    25    739    565268
Tavlen    27.60000038147    741    567316

er hvad jeg læser i databasen.
Avatar billede jakobdo Ekspert
13. juni 2014 - 13:32 #36
Prøv at luk dette spørgsmål og opret det på ny i mysql.
Måske du har mere held der, jeg er blank.
Avatar billede kodak Mester
13. juni 2014 - 13:35 #37
hvis du ser på dit seneste svar
og ser på hvad jeg forventede der kom ud

så stemmer de over ens

det vil sige at din forventning af MAX virkede ikke,

men hvis den bruges på den måde jeg fandt så virker den.
Avatar billede jakobdo Ekspert
13. juni 2014 - 13:37 #38
Jamen så virker nyeste vel?

Og ja, kan godt være "max" kun virker på angivne felt.
Avatar billede kodak Mester
13. juni 2014 - 13:46 #39
Men jeg takker mange gange for indsatsen.
Men Arne_V kom ikke.
Avatar billede kodak Mester
13. juni 2014 - 13:47 #40
har du foresten forstand på Linux?
Avatar billede jakobdo Ekspert
13. juni 2014 - 13:50 #41
Selv tak.
Linux: Lidt.
Avatar billede kodak Mester
13. juni 2014 - 13:55 #42
jeg har et script /var/www/serial/denon.php
køre jeg det fra terminal prompt virker det
men køre jeg det fra browser sker der ikke en skid

det er meningen at det skal skrive komando til den serial'e udgang
Avatar billede jakobdo Ekspert
13. juni 2014 - 14:01 #43
Prøv at vis indholdet af denon.php
Avatar billede kodak Mester
13. juni 2014 - 14:07 #44
<?php
include 'PhpSerial.php';
$serial = new PhpSerial;
$serial->deviceSet("/dev/ttyUSB0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$serial->sendMessage("MVUP\015");
$read = $serial->readPort();
$serial->deviceClose();
$serial->confBaudRate(9600);
?>
og PhpSerial.php kan ses her:
https://github.com/Xowap/PHP-Serial/blob/develop/src/PhpSerial.php
Avatar billede kodak Mester
13. juni 2014 - 14:08 #45
den gør stort set det samme som:
echo -en "MVUP\015" > /dev/ttyUSB0
Avatar billede jakobdo Ekspert
13. juni 2014 - 14:13 #46
Prøv at se om der kommer "indhold" i error.log eller noget, når du kalder siden via web ?
Avatar billede kodak Mester
13. juni 2014 - 14:23 #47
2014-06-12 20:43:32: (mod_fastcgi.c.2676) FastCGI-stderr: PHP Fatal error:  No stty availible, unable to run. in /var/www/serial/PhpSerial.php on line 56
Avatar billede kodak Mester
13. juni 2014 - 14:35 #48
køre jeg kommandoen fra prompt:
# php /var/www/serial/denon.php
kommer der ingen error.

og det virker.
Avatar billede kodak Mester
13. juni 2014 - 14:59 #49
men den skal også virke fra web browser
Avatar billede jakobdo Ekspert
13. juni 2014 - 15:15 #50
Når du kører dem fra commandline, køre du den så som Root ?

Jeg kunne måske tro det er noget omkring rettigheder.
Avatar billede kodak Mester
13. juni 2014 - 15:29 #51
ja jeg køre fra root
men har prøvet at køre : "sudo addgroup www-data dialout"
det skulle meget gerne udvide rettighederne.
Avatar billede kodak Mester
13. juni 2014 - 21:34 #52
Svar

Det sidste køre vidre her:
http://www.eksperten.dk/spm/995365
Avatar billede kodak Mester
15. juni 2014 - 20:11 #53
Vil du smide et svar?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester