/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
mysql selecter forkert?
Fra : Troels Hansen


Dato : 23-09-05 08:54

Er demensen begyndt at trænge sig på, eller hva sker der her?
mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
+----+---------+-------------+
| id | titel | fil |
+----+---------+-------------+
| 0 | Forside | forside.php |
+----+---------+-------------+
1 row in set (0.00 sec)

Burde den ikke returnere tomt resultset?

MySql version 4.1.14


mvh Troels Hansen

 
 
Kristian Damm Jensen (23-09-2005)
Kommentar
Fra : Kristian Damm Jensen


Dato : 23-09-05 09:51

Troels Hansen wrote:
> Er demensen begyndt at trænge sig på, eller hva sker der her?
> mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
> +----+---------+-------------+
> | id | titel | fil |
> +----+---------+-------------+
> | 0 | Forside | forside.php |
> +----+---------+-------------+
> 1 row in set (0.00 sec)
>
> Burde den ikke returnere tomt resultset?

Det ser godt nok mærkeligt ud.

Men uden kendskab til tabeldefinition og -indhold er det vanskeligt at
være sikker.

Kristian


Troels Hansen (23-09-2005)
Kommentar
Fra : Troels Hansen


Dato : 23-09-05 11:47

Kristian Damm Jensen wrote:

>
> Det ser godt nok mærkeligt ud.
>
> Men uden kendskab til tabeldefinition og -indhold er det vanskeligt at
> være sikker.
>
> Kristian

Kan der selvfølgelig være noget om.
mysql> desc side;
+-------+-----------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------------+------+-----+---------+-------+
| id | tinyint(3) unsigned | | PRI | 0 | |
| titel | tinytext | | | | |
| fil | tinytext | | | | |
| login | set('ja','nej') | | | ja | |
+-------+-----------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


mysql> select * from side;
+----+---------------+-------------------+-----------+
| id | titel | fil | login |
+----+---------------+-------------------+-----------+
| 1 | Forside | forside.php | nej |
| 2 | Modtager | modtager.php | ja |
| 3 | Modtagerliste | modtagerliste.php | ja |
+----+---------------+-------------------+-----------+


Jeg har i mellemtiden rettet ID en op, så jeg starter fra 1 i stedet for 0.
Det er somom den, i tilfelde af at det er en int, og en streng der
bliver sammenlignet, regner strengen for false. Lyder bare mærkeligt.
Skriv jeg:
SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = false;
fik jag samme resultet, hvilket også giver mening (og er beskrevet på
mysql.net), men det andet synes jeg ikke giver mening.
Nogen der har en fornuftig forklaring?

mvh Troels Hansen

Benny Nissen (23-09-2005)
Kommentar
Fra : Benny Nissen


Dato : 23-09-05 11:55

Troels Hansen wrote:

> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = false;
> fik jag samme resultet, hvilket også giver mening (og er beskrevet på
> mysql.net), men det andet synes jeg ikke giver mening.
> Nogen der har en fornuftig forklaring?

Hvorfor giver det ikke mening ?
int('test') er jo netop 0

--
Benny Nissen

Thomas Damgaard Niel~ (23-09-2005)
Kommentar
Fra : Thomas Damgaard Niel~


Dato : 23-09-05 11:48

Troels Hansen wrote:
> Er demensen begyndt at trænge sig på, eller hva sker der her?
> mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
> +----+---------+-------------+
> | id | titel | fil |
> +----+---------+-------------+
> | 0 | Forside | forside.php |
> +----+---------+-------------+
> 1 row in set (0.00 sec)
>
> Burde den ikke returnere tomt resultset?

Hvilket domain er side.id?

--
Thomas Damgaard Nielsen
http://thomasdamgaard.dk/
Svar venligst under det du citerer. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Mads Lie Jensen (23-09-2005)
Kommentar
Fra : Mads Lie Jensen


Dato : 23-09-05 12:00

On Fri, 23 Sep 2005 09:54:23 +0200, Troels Hansen <idle@invalid.email>
wrote:

>Er demensen begyndt at trænge sig på, eller hva sker der her?
>mysql> SELECT `id`, `titel`, `fil` FROM `side` WHERE `id` = 'test';
>+----+---------+-------------+
>| id | titel | fil |
>+----+---------+-------------+
>| 0 | Forside | forside.php |
>+----+---------+-------------+
>1 row in set (0.00 sec)
>
>Burde den ikke returnere tomt resultset?

Tjo.... det skulle man jo forvente, men den gør det nu som den skal....

mysql konverterer selv strengen 'test' til et tal - og det får den så
åbenbart 0 ud af.
Hvis du i stedet bruger WHERE id="2test", så vil den få det til tallet
2, og returnere posten med det id.

Om det så er smart at den gør sådan.... men jeg er ret sikker på det er
beskrevet i manualen et eller andet sted.


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - snart i ny indpakning: http://ny.gartneriet.dk

Stig H. Jacobsen (29-09-2005)
Kommentar
Fra : Stig H. Jacobsen


Dato : 29-09-05 21:21

On Fri, 23 Sep 2005 09:54:23 +0200, Troels Hansen wrote:

> Burde den ikke returnere tomt resultset?
>
> MySql version 4.1.14

http://sql-info.de/mysql/gotchas.html

--
Stig

Peter Brodersen (30-09-2005)
Kommentar
Fra : Peter Brodersen


Dato : 30-09-05 01:57

On Thu, 29 Sep 2005 20:20:52 +0000 (UTC), "Stig H. Jacobsen"
<stighj-at-googles-mail@nospam.invalid> wrote:

>http://sql-info.de/mysql/gotchas.html

Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre. Du må
godt smide et mere direkte link, så det er muligt at se, hvilken én af
de gotchas, du skønnede var relevant her.

Såvidt, jeg kan se, er der ikke tale om nogen egentlig gotcha, men
blot om en implicit cast. Det samme oplever du i mange andre tilfælde.
Fx:

$ php -r 'print (0 == "test");''
1

$ perl -e 'print (0 == "test");'
1

... men vel at mærke:
$ perl -e 'print (0 eq "test");'
(intet output)

--
- Peter Brodersen

Stig H. Jacobsen (30-09-2005)
Kommentar
Fra : Stig H. Jacobsen


Dato : 30-09-05 08:51

On Fri, 30 Sep 2005 02:56:34 +0200, Peter Brodersen wrote:

> >http://sql-info.de/mysql/gotchas.html
>
> Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre.

Sagen er MySQL og linket illustrerer diverse utilstrækkeligheder
ved MySQL - til skræk og advarsel

> Såvidt, jeg kan se, er der ikke tale om nogen egentlig gotcha, men
> blot om en implicit cast. Det samme oplever du i mange andre tilfælde.

# create table test_table ( custno int primary key );
# select * from test_table where custno = 'skonummer';

ERROR: invalid input syntax for integer: "skonummer"

# select VERSION();
version
---------------------------
PostgreSQL 8.0.1 on ...

--
Stig

Peter Brodersen (30-09-2005)
Kommentar
Fra : Peter Brodersen


Dato : 30-09-05 15:16

On Fri, 30 Sep 2005 07:50:49 +0000 (UTC), "Stig H. Jacobsen"
<stighj-at-googles-mail@nospam.invalid> wrote:

>> >http://sql-info.de/mysql/gotchas.html
>> Jeg kan ikke lige finde nogen af dem, der har med sagen at gøre.
>Sagen er MySQL og linket illustrerer diverse utilstrækkeligheder
>ved MySQL - til skræk og advarsel

Nej, sagen er, at du uden kontekst blot smed et generisk
MySQL-gotcha-link på banen, der ikke havde henvisning til den aktuelle
problemstilling. Det var ingen hjælp til den oprindelige spørger, og
at implicit opfordre til at skifte til en anden rdbms uden at kende
til omstændighederne (fx om det overhovedet er en mulighed for
spørgeren, om andre rdbms'ers gotchas medfører regressions, etc.) er
blot religion.

--
- Peter Brodersen

Stig H. Jacobsen (30-09-2005)
Kommentar
Fra : Stig H. Jacobsen


Dato : 30-09-05 17:28

Nej, det er ikke religion, men erfaring

--
Stig

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste