Narazil jsem na nějaké podivné chování příkazu SELECT. Zkuste si to sami:
SELECT '0','0','0','0','0','3','1' FROM libovolna_tabulka
Výsledkem je: 0 1 0 3 0 3 1
Chápete? Kdykoli se do SELECTU pokusím zapsat číselnou konstantu, objeví se ve dvou sloupcích: v tom, kde má, a pak v tom, jehož index má. Je to správné chování nebo je to chyba? Já potřeboval jen zapsat do jednoho sloupce v složitějším dotazu konstantu (neptejte se proč, prostě to jinak nešlo), a dostal jsem z toho tohle, tak teď nevim co s tim.
To neni divne chovani SELECTu, to je divne chovani TVEHO SELECTu :)))
Zkusel jsem to a chodi to normalne, podle predpokladu to vrati tolik radku, kolik ma ta moje tabulka a kazdy radek ma 7 sloupcu s hodnotami '0','0','0','0','0','3','1' , presne jak by clovek predpokladal.
Mam MySQL verze 3.23.49.
Mozna bude chyba v tom, ze je to jak pises "soucasti slozitejsiho dotazu", takze to muze ovlivnovat spousta veci.
Ne, napsal jsem to přesně tak, jak je to tady, samostatně, ne součástí něčeho jiného. Vrátí to vždy to, co jsem napsal. To jsem taky zkopíroval:
SELECT '0','0','0','0','0','3','1' FROM Kniha WHERE 1
Výsledek:
0 1 0 3 0 3 1
v každém řádku.
Třeba to souvisí s nastavením typu tabulky.
?
Já nevim.
Zkus sem poslat strukturu te tabulky Kniha...
Na struktuře nezáleží. Zkoušel jsem to na všech tabulkách různých struktur! Zkus to na čemkoliv.
<HTML><tt>mysql> SELECT '0','0','0','0','0','3','1' ;
+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 3 | 1 |
+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 3 | 1 |
+---+---+---+---+---+---+---+
1 row in set (0.00 sec)
</tt></HTML>
Presne tak! Zkusil jsem to na "cemkoliv" a opravdu - viz mira - hazi mi to stejne vysledky, a to presne podle predpokladu, zadny zmateny cisla jak's napsal na zacatku.
Divný.
Zkusil jsem to úplně na všech tabulkách ve dvou různých databázích, které na webzdarma mám.
Jedna z nich je elektrostraka.webzdarma.cz
Všude mi to dalo stejné hodnoty: 0103031
vůbec nechápu, co se děje.
Miro, můžeš mi to prosím zkusit na mojí databázi? Uvidíš sám. ;-)
SELECT 1,3,4,5 FROM ...
(Bez 'uvozovek' ve jmene sloupcu)
Bez uvozovek (nebo apostrofů) se mi to chová úplně stejně.
Copak jsem jediný, komu se to stalo? To přece neni možný!
Ja se musim pridat k mirovi a tomasovi, mam stejne - korektni chovani DB.
Server version Mysql 4.0.20-standard pro Linux. Opravdu mrkni na verzi a zkus upgrade :-)
mysql> select '1','2','3','4' from TEST.tab1
-> ;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | 4 |
| 1 | 2 | 3 | 4 |
+---+---+---+---+
5 rows in set (0.00 sec)
záleží, jaký se použijou uvozovky, jestli se nepletu. MySQL používá jiné pro jména (``) a jiné pro hodnoty (' ') nebo (" "). Třeba je problém v tom...
SELECT sloupec FROM tablka WHERE podminky
tohle znáš...
mysql> select nadpis from hledani;
+----------------------------+
| nadpis |
+----------------------------+
| MySQL Tutorial |
| Jak na PHP |
| C/C++ - praktický průvodce |
+----------------------------+
3 rows in set (0.00 sec)
mysql> select "nadpis" from hledani;
+--------+
| nadpis |
+--------+
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
| nadpis |
+--------+
18 rows in set (0.07 sec)
mysql> select `nadpis` from hledani;
+----------------------------+
| nadpis |
+----------------------------+
| MySQL Tutorial |
| Jak na PHP |
| C/C++ - praktický průvodce |
+----------------------------+
3 rows in set (0.01 sec)
mysql>
Samozřejmě, že když tam dám SELECT '1','2','3','4'; ,
tak to funguje, protože se přepíše 1123 na 1234, když se to zpracovává. Ale '4','3','2','1' dá výsledek 4,1,2,1.
SELECT "4","3","2","1";
udělá totéž
SELECT 4,3,2,1;
taky
a
SELECT `4`,`3`,`2`,`1`;
nefunguje vůbec, protože `4` se žádný sloupec nejmenuje.
To jsou snad všechny možné kombinace uvozovek a apostrofů.
Vše je odzkoušeno na databázi WEBZDARMA!
(kontrétně elektrostraka.webzdarma.cz)
Prostě v životě nemůžu dostat jako výsledek SQL dotazu v některých sloupcích konstantní číslo, ať dělám cokoliv.
:-(
A víte co? Vykašlete se na to. Už to neřešte. Prostě je tam chyba a já to obejdu tím, že tam dám výraz:
SELECT 1*4,1*3,1*2,1*1;
a už to funguje :-D
Machr to mě nenapadlo ... nevim už jakej přesně problem sem s tim měl, ale když je jako název sloupce tabulky číslo a nic víc tak to dělá bordel.
Ještě by šlo určitě zkusit
SELECT 1 as jmeno_sloupecku, 2 as jmeno_sloupecku from tabulka
moc jsem po tom nepátral, ale asi si to chce vytvořit jméno sloupečku začínající číslem a to ho asi zmate. A zkusti sloupeček pojmenovat bude asi rychlejší jak násobení, byť násobení jedničkou. (proč jsi k tomu nepřičetl nulu? to by bylo taky rychlejší jak násobení?)