Sveiki,

nežinau kaip daroma tokiais atvejais, kai reikia apjungti duomenis iš kurlių lentelių kai vienas srulpelis turėtų būti sujungtas su keliomis lentelėmis. Suprantu, kad aš čia painiai, bet pamėginsiu su pavyzdžiu:

Tiekėjo_A_sąskaitos
id
numeris
data
...


Tiekėjo_B_sąskaitos
id
numeris
data
...

Pardavimai
pardavimo_sąskaitos_id
pardavimo_sąskaitos_nr
...

sąskaitų_ryšiai
tiekėjo_sąskaitos_id
pardavimo_sąskaitos_id

Tai va, man reikia kažkaip padaryti tokį pardavimų žurnalą (sąskaitų_ryšiai), kad galima būtų atsekti koks pardavimas kokią pirkimo sąskaitą atitinka. O tai reiškia, kad tiekėjo_sąskaitos_id gali rodyti ir į Tiekėjo_A_sąskaitos lentelę, ir į lentelę tiekėjo_B_sąskaitos. Ir kaip išsisukti šioje situacijoje - nežinau... Pridėti dar vieną stulpelį "tiekėjo_lentelės_pavadinimas" ir jungti programiškai?

Sveiki,

yra lentelė "prekės":
id|data|pirkimo_sąskaitos_nr|kiti_duomenys

dar yra lentelės:
tiekėjas_a:
id|data|sąskaitos_nr|suma|blah blah blah

tiekėjas_b:
id|data|sąskaitos_nr| kitkas

"prekių" lentėlėje gali būti prekės ir iš tiekėjo "a" ir iš tiekėjo "b". Klausimas: ar galima padayti "join on `pirkimo_saskaitos_nr`=`tiekėjas_a`.`saskaitos_nr`", bet jeigu neranda tokio sąskaitos numerio pas tiekėją "a", tada bando ieškoti lentelėje "tiekėjas_b"?

galbūt suveiktų toks join:

select a.id as 'aid', b.id as 'bid', d.id as 'did',...kiti laukai..  from A left join B on a.id=b.id left join d on a.id=d.id
where did not null
order by b.laukas

Sveiki,

jau daugiau nei metus turiu registracijos formą, kur registruojasi mūsų klientai. Per tuos metus jau prisiregistravo daugiau nei 30 000 žmonių (taip kad db tikrai  "matė" visokių simbolių) ir tik dabar pasitaiko antras atvejis, kai į duomenų bazę papuola įrašas, kuriame yra simbolis, kurį (eksportavus duomenis iš DB į csv failiuką) Notepad++ rodo kaip "SUB", pažiūrėjus ant linux serverio tas simbolis rodomas kaip "^Z". Internete radau, kad tai yra kontrolinis simbolis kurio ASCII kodas \x1A (arba dešimtainėje sistemoje - 26), jo reikšmė - "Substitute". Kaip suprantu, šie simboliai likę iš senų laikų ir reikalingi unix ar dos konsolės valdymui. Dėmesio, klausimai:

Kaip tokie simboliai gali pakliūti iš registracijos formos į DB? juk tai nėra "printable characters" , t.y. nelabai gali būti kad žmogus netyčia nuspaudžia kokį nors klavišą.

Kodėl interneto naršyklė juos perduoda į serverį?

Ir antras papildomas klausimas būtų kam gali būti naudojamas šis simbolis šiais laikais?

Dėkui, panašu kad tai yra panašu į tai ko ieškojau! Bet man vis tiek lieka keista, kad MySQL neturi savo įrankio DB migracijai į kitą serverį ar pan., o reikia žaisti su kažkokiais skriptais. Kažkaip nerimta...

Sveiki,

iki šiol DB kopijas darydavau su mysqldump, tačiau šiandien teko žiauriai nusvilti - pasirodo myslqdump neišsaugo vartotojų ir jų slaptažodžių informacijos. Ar yra koks nors įrankis perkelti _visą_ db informaciją iš vieno serverio į kitą (t.y. su vartotojais, jų slaptažodžiais ir t.t.).

Mysql puslapyje radau tokią informaciją apie mysqldump:

http://dev.mysql.com/doc/refman/5.1/en/ … ckups.html

mysqldump does not dump the INFORMATION_SCHEMA database. If you name that database explicitly on the command line, mysqldump silently ignores it.

Dell wrote:

simai aciu, uzvedei ant kelio, pavyko realizuoti uzklausa, tik ji labai negrazi, tai jos cia nedesiu :) bet veikia.

aciu

Vis tiek būtų įdomu pamatyti galutinį variantą. įmesk, jei ten nėra paslapčių.

Dell wrote:

ir uzklausa atrodytu tuomet mazdaug taip?   SELECT * FROM marsrutai WHERE (stot1=S3 AND stot2=S6) AND (stot1.nr<stot2.nr)

ar teisingai. ar kaip nors protingiau galima padarti lentel ?

Na, kažkas panašaus, tik naudoti ne stoteles o marštutus, kitas dalykas kad turėdamas tokią lentelės struktūrą turėsi tik apibrėžtą stotelių skaičių kiekvienam marštutui. mano supratimu, reikėtų daryti keletą lentelių: maršrutai, stotelės ir trečia lentelė - jų sąjunga (many to many) maršrutai-stotelės.

t.y. marsrutai
ID| Maršrutas| kita info apie mašrtutą ir t.t.
1  | A11 | žemagrindis
2  | B7| greitasis
3  | C3| paprastas

stotelės
ID | Pavadinimas      | Kita info jei reikia
1  | Autobusų parkas |
2  | Klevų                 |
3  | beržų                 |
4  | ąžuolų                |
5  | briedžių             |

ir po to jas jungiančią lentelę `marsrutu_stoteles`:
ID| Marštuto ID| stotelės ID| stotelės numeris maršrute
1|   1               | 1             | 1
2|  1                | 2             |2
3| 1                 | 5             |3
.....
ir t.t.
norėdamas išrinkti mašrutą kuris veža iš klevų į briedžių stotelę turėtum rinkti iš šios trečiosios lentelės darydamas join su pirmosiomis dviem:
select `marsrutai`.`marsrutas`, `stoteles`.`stotele` as `pradine stotele`, `stoteles`.`stotele` as `galine stotele` from `marsrutu_stoteles` left join `marsrutai` on `marstutu_stoteles`.`marsrtuto id`=`marsrutai`.`id` group by `marsruto_id` having `stoteles_id`=2 and `stoteles_id`=5

tik kol kas nežinau kaip šioje užklausoje įjungti "where `stotele2` `stotelės numeris maršrute`> `stotelė5` `stoteles numeris maršrute`. Vienas variantas - daryti tai jau pačioje programoje, apdorojant Mysql rezultatą. bet kažkaip man tai atrodo greičiau kaip hack'as, negu teisingas kelias. Tavo vietoj pamėginčiau paieškoti daugiau info MySLQ manuale - gal būtų būdas priversti tai padaryti patį Mysql serverį :)

Dell wrote:

Sveiki,

turiu tokia uzduoti isrinkti duomenis, kurie atitinka tam tikrus kriterijus, kad lengviau butu aprasysim autobuso marsrtuto pavyzdziu.
tarkim turim DB tokius irasus:

Autobuso Nr: A11, B7, C3, D4 ir t.t.
Pradinis St:   S1,  S3,  S3, S7
Tarpinis 1:    S2,  S4,  S4, S6
Tarpinis 1:    S3,  S5,  S5, S5
Tarpinis 1:    S4,  S6, S11, S4
Tarpinis 1:    S5,  S8, S12, S3
Tarpinis 1:    S6,  S9, S13, S2
Galutinis St: S7,   S10, S14, S1

sakykim domina autobusai, kuriais galima nuvaziuoti is sustojimo S3 i sustojima S6
resultatas turetu buti: A11 ir B7
p.s. atsakymas D4 netinkama autobusas vaziuoja kita kryptim.
p.s.2 isrinkimo kriterijau pateikiami visdada tik 2.

kol kas nekyla minciu, kaip teisingai suprogramuoti visa tai :(

is anksto aciu uz sviesias mintis :)

Aš manyčiau, kad čia paprastas select'as: SELECT * from autobusai where stoteles=S3 and stotelės=S6

O tam kad negaudytų priešinga kryptimi važiuojančių reikia žiūrėti kokia pas tave lentelės struktūra ir galbūt rašyti sąlygą "WHERE S3<S6), arba  (jei dar to nėra) reikia į maršrutą įrašyti stotelės eilės numerį (where S3_stotelės_nr>S6_stotelės_nr)

Sveiki,

ar yra būdas kaip nors su komanda

LOAD DATA INFILE 'C:\logs\2008_01.log

įkelti daug failų? Wildcards (* ir ?) panašu kad neveikia...

Simas.

Sveiki,

ar įmanoma ant mysql padaryti taip, kad date laukelis pagal default būtų toks pats, kaip prieš tai įvestas? Nes dabar gaunu csv failą, kuriame yra:

2009-01-20; "xxx";"yyy";
;"aaa";"bbb";
;"ccc";"ddd";
2009-01-21; "eee";"fff";
;"ggg";"hhh";

Reikia kad pakraunant failą eilutei aaa,bbb paskirtų 2009-01-20 d., eilutei ccc,ddd - taip pat 2009-01-20,  eee,fff - jau naująją datą, o ggg,hhh - data turi būti 2009-01-21. Any ideas?

Puslapyje nurodyta koduotė

<meta http-equiv="Content-Type" content="text/html; charset=windows-1257">

duomenų bazėje visur naudoju "cp1257_lithuanian_ci", kaip jau minėjau - daugeliu atveju (99%) viskas veikia ok. Jei būtų blogai su koduotėmis, tai visi ar dauguma db įrašų būtų blogi.

Kaip spėju,  problema atsiranda kai ateina klientas su našykle, kuri perduoda duomenis utf8 koduote ir bando juos perkoduoti ir paversti nežinia kuo.

Man šiuo atveju svarbiausias klausimas kaip su tokiais simboliais kovoti? kokias funkcijas naudoti? Kiek skaičiau php manual, tai html_decode neapdoroja tokių simbolių, ši funkcija apdoroja tik < & > ir kt. specialius simbolius....

Sveiki,

patarkit kaip tvarkytis su tokia situacija: yra html forma  (koduotė windows 1257). Registruojasi klientai. Daugeliu atveju viskas vyksta gerai, bet kai kuriems klientams vietoj lietuviškų raidžių rodo &amp;#353 &smp;#382 ir pan. simbolius. Kodėl taip atsitinka, ir kaip tvarkytis su tokiais simboliais? Nes po to duomenys iš mysql exportuojami į CSV failus ir gaunasi daugiau stulpelių ir pan., vnž susigadina visa failo struktūra

parazitux wrote:

tai va tokia uzduotis reikia php skripto reikia kad atitinkama raide
A B C D E F G H I J K L M N O P R S š T U V Z ž
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

gal i emeila atsiusti galetumet?

nelabai suprantu, ko nori, bet pabandyk daryti hash masyvą:

$kodas = array( 
   'A'=>1, 
   'B'=>2,
   ir t.t.
);

po to kai reikės pakeisti raides skaičiais tiesiog imsi raides iš masyvų.

15

(2 replies, posted in PHP)

Vytska wrote:

Kaip gauti adresą puslapio, kuriame esi... žinau, kad yra kažkokia f-ja su http_request ar kažkas panašaus, bet tiksliai neatsimenu... Padėkit...

Tikslus puslapio adresas yra $_SERVER['PHP_SELF'] kintamajame.

16

(3 replies, posted in PHP)

zygis wrote:
function rodyk ($x){

echo $x;   

}
rodyk("05415");

PHP kalboje, jei skaičius prasideda 0 - jis laikomas aštuntainės sistemos skaičiumi, jei 0x - šešioliktainės.
Taip kad jei paduodi 010 tau turėtų atspausdinti "8"
jei paduosi 0x10 tau atspausdins "16"

P.S. Jei nori, kad iš atspausdintų su 0 priekyje, nurodyk, kad tai yra string tipo kintamasis.

17

(9 replies, posted in PHP)

minde wrote:
simas wrote:

P.S. Man rodos C/C++ kalbos mėgėjai dar pridėtų 3 variantą - perduoti funkcijai pointer'į į masyvą :)

Tai ir PHP gali perduoti pointerį (nuorodą)..

Taip, žinau, bet čia jau daugiau "C/C++ style". Kažkaip PHP kalboje nelabai dažnai tenka matyti, kad būtų perduodama nuoroda. Nors aš negaliu pasigirti, kad daug matęs :)

18

(9 replies, posted in PHP)

zygis wrote:

uz b varianta, kapoti rankas reikia :)

kodėl?

P.S. Man rodos C/C++ kalbos mėgėjai dar pridėtų 3 variantą - perduoti funkcijai pointer'į į masyvą :)

Dėkui, padėjo!  Nors įsivaizdavau, kad tai įmanoma padaryti su MySQL (kažkaip inkrementinant datą), tačiau paaiškėjo, kad pparasčiau pasidaryti su PHP, aišku panaudojant išrinkimą iš userių lentelės. Atskiros lentelės generuoti vien datom nenorėjau, o laikinai pasidaryti pačiame mysql'e nemokėjau.

Sveiki,

yra poreikis sugeneruoti daug įvykių kiekvienai dienai, kiekvienam useriui. Na, tarkim reikia įterpti duomenis į tokią lentelę:
data user_id action_id

dabar nuo liepos 1 d. iki šios dienos kiekvienam useriui reikia padaryti po įrašą
2009-07-01    01    35
2009-07-01    02    35
2009-07-01    03    35

ir t.t., po to
2009-07-02    01    35
2009-07-02    02    35
2009-07-02    03    35


ir t.t. Gal kas patars, kaip vienu geru sql sakinuku įterpti daug datų, o dar geriau jei vienu sakinuku galima būtų iš lentelės paimti visus userius ir jiems automatiškai sugeneruoto tokius įrašus, nes pas mane įdėjų 0 - arba tai reiįkia, kad šiandien pirmadienis, arba man reikia į kokius nors SQL kursus

P.S. action_id nekinta, visą laiką tas pats.

Dėkoju iš anksto