waeris wrote:

O kaip atspausdinti tokius duomenis?

Paprastai - su printeriu :)

Jei būtų dublikuotas įrašas, tai  klaida ir būtų tokia (duplicate key found...). Galbūt jam nepatinka tas "0" pradžioje?

Labai ačiū! Panašu į tai, ko man reikėjo, mėginsiu naudoti.

kad pas tave viskas gerai, tik sintaksės ir logikos klaidų yra:

$sql = "SELECT * FROM lentele WHERE kazkas = 'kazkas' AND skaicius >= '$skaicius_nuo' AND skaicius <= '$skaicius_iki'";

P.S. Pas tave po paskutinio nuo" nebuvo uždarančių kabučių ir nei vienas skaičius nepakliūdavo į intervalą, nes negali skaičius būti didenis už 70 AND mažesnis už 50 ;)

Tada lieka tik aplikacijos problemos... Kokia aplikacija įkėlinėja duomenis? PHP skriptas?  Jis irgi buvo perkeltas iš Linux ant windows? Galbūt ant http serverio konfigūracijoje nurodyta direktyva "AddDefaultCharset latin1" ar pan.? (Buvau ant tokio bajerio pasimovęs vieną kartą). ši direktyva buvo nurodyta apache katalogo conf.d/charset faile, windowsuose gali būti analogiškai.

Kitas iš galimų sprendimo būdų būtų pačiame php skripte iš karto po prisijungimo prie mysql serverio įdėti eilutes:

SET CHARACTER SET 'utf8'
SET NAMES utf8
SET CHARACTER_SET_CLIENT='utf8'
SET CHARACTER_SET_RESULTS='utf8'

turėtų padėti, jei pats php skriptas grybauja

Sveiki,

reikia pagalbos su MySQL duomenų imporatvimu į Excel failiuką. Kiekvieną mėnesį reikia padaryti tokią užklausą:

select * from `saskaitos` where `SaskaitosData` BETWEEN  '2008-07-01'  AND '2008-07-31'

Klausimas: kaip padaryti excel failiuką, kad kiekvieną kartą paklaustų, kokio mėnesio sąskaitų sąrašo nori ir kaip tą užduotą datą perduoti į MySQL? Rašyti kažkokią procedūrą? Padaryti View? Ar View galima pateikti parametrus?

Patikslinimas: MySQL serveryje  padariau View, prie jo sėkmingai iš  prisijungiu iš Excel naudodamas ODBC, belieka klausimas kaip perduoti tą nelemtą datą ir kaip ją apdoroti užklausoje?

Iš bėdos tiktų ir toks variantas, kad užklausoje įkodiname, kad paimtų visas praėjusio mėnesio sąskaitas. T.y. mėnesių pasirinkimas susiaurinamas iki praeito mėnesio. Kaip tai padaryti? "Now() - x"?

"serveryje nurodyta koduotė" - nepakankamas pasakymas. Serveryje yra bent keli kintamieji, nusakantys koduotę Serverio default koduotė, sesijos default koduotė, db koduotė, lentelės koduotė, galų gale to lentelės  lauko koduotė turi įtakos.

Pradžiai patarčiau C:\Program Files\MySQL\MySQL Server\my.ini

pažiūrėti ar  nustatyti tokie  kintamieji:

[mysql]
default-character-set=utf8

[mysqld]
default-character-set=utf8

pamėgink tokią užklausą:

select t1.id from t1 where t1.id not in (select t2.TB1_ID from t2)

beje, gali būti, kad veiktų ir paprastesnis variantas:

select t1.id from t1 where t1.id not in t2.TB1_ID

bet neturiu ant ko pamėginti.

F-23 wrote:

Is neturejimo ka veikti sugalvojau toki uzklausos varianta:

SELECT m.miestas, sum(if(a.id_tip=1,1,0)) as leng, sum(if(a.id_tip=2,1,0)) as dzip,
sum(if(a.id_tip=3,1,0)) as mik, sum(if(a.id_tip=4,1,0)) as aut
from miestai as m, auto as a
WHERE m.id=a.id_miest GROUP BY miestas;

Taip, bet čia būtent ir yra tai, ko aš norėjau išvengti - kintamųjų hardcodinimas į funkciją. Ką daryti, jei prisideda naujas automobilių tipas? Arba, jei tų tipų yra labai daug (tarkim, daugiau kaip 50)? Todėl tavo variantas galbūt ir teisingas, tačiau prireikus realiam gyvenime tokio geriau vengti, nes pasikeitus kokiems nors parametrams po to reikia ieškoti sliekų visame programos kode.

P.S. Su šio forumo dalyvių patarimais problemą taip: iš pradžių vienas select'as išrenka automobilių tipus, po to php cikle suformuoju naują užklausą su kuria padarau pivot table.

Ačiū už operatyvų atsakymą. Bandysim tikrinti, nors iš pirmo žvilgsnio visur pateikiami pavyzdžiai, kur tipus (Lengvasis, minivenas ir t.t.) reikia rankomis "hardcodinti" į SQL užklausą, o norėtųsi kad būtų neribotai - iš vienos lentelės paimi tipai, ir tada sumuojama.

Dar kartą dėkui už nuorodą!

Sveiki,

nelabai įsivaizduoju net kaip ieškoti googlėj tokios  informacijos, tad tikiuosi labai nespardysit, jei klausimas pasirodys kvailas.

Yra lentelės:

Automobilis
id | markė       | tipo_id |Miesto_Id...
1 | Volksvagen | 1        | 2
2 | Mercedes    | 3        | 4
3 | Peugeot      | 4        | 1
4 | Audi           | 2        | 3

Tipai
id | tipas
1 | lengvasis
2 | mikroautobusas
3 | minivenas
4 | sunkvežimis
...

miestai
id| pavadinimas
1 | Vilnius
2 | Kaunas
3 | klaipėda
...

Noriu suskaičiuoti, kiek kokio tipo automobilių yra mieste, t.y. gauti tokią lentelę:

               Lengvasis   Mikroautobusas Minivenas Sunkvežimis
Vilnius         13              10                      3           1
kaunas        4                10                     2            0   
Klaipėda      7                 2                     0            0


Tikiuosi supratote, kokią lentelę noriu gauti... Gal kas galėtų užvesti ant kelio?

Sveiki,

išskilo reikalas palyginti įvykių skaičių per du periodus. Pvz., yra lentelė:

id, įvykio_tipas,registravimo_data, kiti_duomenys

kur surašomi visi įvykiai. Aš noriu paimti, ir pažiūrėti, kiek kokių įvykių buvo per vieną mėnesį, ir kiek buvo per kitą, koks pokytis. Ar tai įmanoma padaryti su 1 query, ar neįmanoma ir reikės daryti 2 select'us? Kol kas įsivaizduoju, kad darysiu taip:

select įvykio_tipas,count(*) as 'įvykių_skaičius' from įvykiai group by įvykio_tipas where registravimo_data>='2008-02-01' and registravimo_data<='2008-02-28'

o po to tokią pačia query tik su kitomis datomis, po to imsiu duomenis ir juos palyginsiu jau programoje. Bet gal yra paprastesnis būdas?

Jo, gera pizdavotis kai tai atstinka ne jums.  Toks jau tas lietuviškas charakteris - nepapizdavojęs kitų jautiesi toks menkas, o va kai "pavarai", tada jau patampi viso kaimo kiečiausiu ereliu.

P.S. Beje, sprendimo pats neradai, taip kad labai gudriu dėtis nereikėtų.

O dokumentacijoj "col names" parašyta tokiom mažytėm, mažytėm raidelėm... :)

Sveiki,

radau klaidos priežastį - pasirodo komanda turi būti tokia:

LOAD DATA INFILE "c:\\test\\testinis.csv"
     INTO TABLE `testas`
     CHARACTER SET 'cp1257'
    FIELDS TERMINATED BY ';'
     OPTIONALLY ENCLOSED BY """"
     TERMINATED BY '\r\n'
(`sutartis`,`UzsakymoNr`,`SutartiesPriedoNr`,`Transportas`,`SaskaitosData`,`SaskaitosNr`,`Vaztarascionr`)


t.y. laukai turi eiti paskutiniai.  O tam atrasti man prireikė dviejų dienų  :(

Pamėginau pašalinti koduotės komandą - vis tiek stringa iš karto po uždarančio skliausto, nesvarbu kokie toliau žodžiai ar komando bebūtų...

Nu tai tu dabar esi teisingame puslapyje (setup scripte). Tiesio viename laukelyje jau įrašei username "root", kitame įrašyk slaptažodį ir paspausk mygtuką "add". Kaip ir turėtų veikti.

Buvo MySQL 5.0.24a-comunity-nt, bet šiandien iškilus šiai problemai parsisiunčiau naujausią versiją iš mysql.com - 5.0.45-comunity-nt. Bet deja, panašu kad nepadėjo...

Beje, kai per mysql query browser nukopijuoju schemą, rodo

`testine_db`.CREATE DATABASE `testine_db` /*!40100 DEFAULT CHARACTER SET utf8 */;

Gal sakau dėl to mysql pasimeta? Bet mano logika sako, kad jei nesutaptų koduotės, tai duomenysturėtų įsikelti kringeliais ir hieroglifais, o ne mesti tokią klaidą. Bet pati lentelė tai visur naudoja cp1257:

CREATE TABLE  `testine_db`.`testas` (
  `ID` bigint(20) unsigned NOT NULL auto_increment,
  `Sutartis` char(20) collate cp1257_lithuanian_ci NOT NULL,
  `UzsakymoNr` bigint(7) unsigned NOT NULL,
  `Terminalas` varchar(250) collate cp1257_lithuanian_ci NOT NULL,
  `SutartiesPriedoNr` tinyint(3) unsigned NOT NULL,
  `Transportas` varchar(25) collate cp1257_lithuanian_ci NOT NULL,
  `SaskaitosData` date NOT NULL,
  `SaskaitosNr` char(10) collate cp1257_lithuanian_ci NOT NULL,
  `VaztarascioNr` varchar(10) collate cp1257_lithuanian_ci NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `UzsakymoNr` (`UzsakymoNr`)
) ENGINE=InnoDB AUTO_INCREMENT=10991 DEFAULT CHARSET=cp1257 COLLATE=cp1257_lithuanian_ci;

Sveiki,

Kreipiuosi į jus pagalbos, nes niekaip nesugebėjau internete rasti atsakymo į paprastą klausimą; jei turiu užklausą

LOAD DATA INFILE "c:\\test\\testinis.csv"
     INTO TABLE `testas` (`sutartis`,`UzsakymoNr`,`SutartiesPriedoNr`,`Transportas`,`SaskaitosData`,`SaskaitosNr`,`Vaztarascionr`)
     CHARACTER SET 'cp1257'
    FIELDS TERMINATED BY ';'
     OPTIONALLY ENCLOSED BY """"
     TERMINATED BY '\r\n'


kodėl šioje užklausoje man metą klaidą:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET 'cp1257'
    FIELDS TERMINATED BY ';'
     OPTIONALLY ENCLOSED BY '""'
' at line 3

Sveiki, turiu problemėle, kurios nemoku išspręsti ir tikiuosi jūsų pagalbos.

Yra keturios lentelės:
produktai (id, produktas),
uzsakymai_tiekejams (id, ivykdymo_data, ... kt. duomenys),
uzsakymo_produktai (id, uzsakymo_id, produkto_id, kiekis) - cia surasomi kiekvieno uzsakymo visi produktai, isvezimas (id, ivykdymo_data, ...[vairuotojas ir kt. siuo atveju nesvarbus duomenys])
isvezimo_produktai (id, isvezimo_id, produkto_id,kiekis)

Dabar mūsų darbuotoja užsako produktų pas tiekėją, o po to siunčia užsakymą transportui, kad išvežtų. Bet jei pamato, kad kažkiek produktų reikia daugiau, siunčia papildomą užsakymą ir t.t. Transportas nebūtinai visą užsakymą iš tiekėjo išveža iš karto - t.y. transporto užsakymai != išvežimo užsakymai, nes galima išsivežti dalimis. Bet per dieną kiekvieno produkto užsakytas kiekis turi būti lygus išvežamam kiekiui.
  Reikia kazkaip padaryti, kad programa patikrintų, ar kitą dieną užsakytas kiekvieno produkto kiekis (suma) lygus išvežamam kiekiui. Klausimas būtų toks: ar tai imanoma padaryti duomenu bazės serveryje/lygyje, ar paprasčiau imti ir daryti select'us kuriuose butu 'group by date broup by product_id, sum of kiekis'  ir po to programoje tikrinti sumas, ar galima parašyti užklausą db serveriui? Man rodosi, kad turėtu būti koks nors apjungimas ir išrinkimas tų įrašų, kurie skiriasi, bet mano sql žinios tiek netraukia...

Iš anksto dėkoju už pagalbą.

Simas.

Dėkoju, tai yra būtent tai ko aš ir ieškojau!