Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
28.09.2007 13:27:10
|
|
|
Sest mul on vaja lehel kuvada 4 eri numbrit. Need $mitu1, $mitu2 jne. Neil kõigil peab olema oma väärtus. Aga selle saamiseks ei taha nii palju päringuid teha. :/
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
tomps01
HV vaatleja
liitunud: 09.06.2004
|
28.09.2007 15:15:21
|
|
|
Kui sa count(*) aru saad, siis võid proovida järgmist asja (ma loodan et mysql lubab 0 selectida):
(SELECT count(*), 0, 0 FROM tabel1 WHERE user_id = '$u_id')
UNION
(SELECT 0, count(*), 0 FROM tabel2 WHERE user_id = '$u_id')
UNION
(SELECT 0, 0, count(*) FROM tabel3 WHERE user_id = '$u_id')
jne.
|
Lihtsalt kood peaks arusaadav olema ja kui sa sellist asja teed, siis su koodi parandaja annab sulle tulevikus peksa
Kui sul on uuem MySQL, siis võiksid uurida stored proceduride kasutamist ja olenemata MySQLi vanusest mõelda, et äkki saad tabelid kokku tõsta.
Pealegi 4 count(*) päringut ei muuda su koodi tõenäoliselt nii meeletult aeglasemaks ja kui neid päringuid kutsutakse välja miskis tsüklis, siis äkki saad enne tsükli käivitamist vastavad read miskitesse 4 massiivi lugeda a'la
$result = mysql_query("select count(*) as arv, user_id
from tabel
where blabla
group by user_id");
while($row = mysql_fetch_row($result)){
$massiivike[$row["user_id"]] = $row["arv"];
}
|
Ning pärast siis "õiges" tsüklis kasutad saadud massiivi.
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
|
tanzanite
HV kasutaja
liitunud: 13.05.2006
|
28.09.2007 15:50:25
|
|
|
select count(1) cnt from tabel1 where this and that union select count(1) cnt from tabel2 where something else |
või
select ((select count(1) from tabel1 where this and that) + (select count(1) from tabel2 where something else)) |
näiteks.
|
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
28.09.2007 17:05:20
|
|
|
Proovisin tomps01 ülemist näidet, kuna sellest sain natukenegi aru midagi, aga tulemuseks on mingi ebanormaalne ja vale arv, pealegi ma ei oska sellest päringust võtta arve 4 erineva muutuja jaoks, (neid ei tohi kokku liita.)
tanzanite on vist liiga tuumafüüsiku teadmistega, see näide siis seega käib mulle hetkel üle jõu.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
28.09.2007 17:12:24
|
|
|
no siis jääd nelja päringuga, see ei ole nii hull kiirusekadu (millisekundites asi)
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
Renka
HV Guru
liitunud: 01.04.2002
|
28.09.2007 17:20:43
|
|
|
mikk36, SGMi neli päringut küsivad kogu tingimustele vastava info baasist (terved read) mitte ainult numbrit - ja see võib olenevalt info mahust olla päris suur overhead.
Igal juhul soovitaks count'i kasutada
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
|
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
28.09.2007 18:26:15
|
|
|
Renka kirjutas: |
mikk36, SGMi neli päringut küsivad kogu tingimustele vastava info baasist (terved read) mitte ainult numbrit - ja see võib olenevalt info mahust olla päris suur overhead.
Igal juhul soovitaks count'i kasutada |
Mul ongi probleem selles, et saidil on liiga palju päringuid, ja teenusepakkuja juba inises mu kallal, vahepeal pandi piirang peale mu kontole. :/ Vaja on hoida päringute arv võimalikult väike, seepärast ei taha 4 päringuga asju hoida. Aga kuidas see ikkagi välja näeks, kui tahan tabel1-st võtta info 2x - where user_id = '$u_id'; ja siis teine kord samast tabelist: where other_id = '$u_id'. Siis täpselt sama asi teha tabel2-ga, seega kokku 4 väärtust on vaja saada ja need anda 4-le erinevale muutujale. Hetkel ei mõista, kuidas see käib, kuni muutujateni välja.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
28.09.2007 20:12:10
|
|
|
Renka kirjutas: |
mikk36, SGMi neli päringut küsivad kogu tingimustele vastava info baasist (terved read) mitte ainult numbrit - ja see võib olenevalt info mahust olla päris suur overhead.
Igal juhul soovitaks count'i kasutada |
seda küll, aga kui count ei meeldi, siis piisaks ka lihtsalt id'de sikutamisest
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
julmu
HV kasutaja
liitunud: 20.12.2004
|
29.09.2007 20:39:27
|
|
|
sql:
|
SELECT count(*) AS kokku, 'maju' AS asi FROM majad WHERE omanik = 'SGM' UNION SELECT count(*), 'autosid' FROM autod WHERE omanik = 'SGM' UNION SELECT count(*), 'naisi' FROM naised WHERE abikaasa = 'SGM' UNION SELECT count(*), 'lapsi' FROM lapsed WHERE isa = 'SGM'
|
php-brief:
|
$$rida['asi'] = $rida['kokku']; }
|
Saad endale muutujad $maju, $autosid, $naisi ja $lapsi mis sisaldavad siis vastavat arvu
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
09.01.2008 20:19:53
|
|
|
hmm... Nüüd on mul nii, et see $rida['asi'] sisaldab vajalikke arve järjest, näiteks nii: 11515032, aga õiged arvud oleks 115, 150, 3, 2. Kuidas ma need arvud sealt eraldada saan õigesti? Proovisin mitutmoodi, aga sain hoopis tühjust või niisama jama.
EDIT:
Tulin hiljuti tagasi selle käkerdise juurde, kus mul 4 päringut järjest on 1 asemel...
Proovisin niipidi ja naapidi, aga seekord on tulemus hoopis empty() Eelmine kord vähemalt midagigi näitas - õigeid arve ühes stringis järjest...
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
09.01.2008 20:44:21
|
|
|
topelt $ seal ees küll olla ei tohiks, lisaks peaksid sa saama iga asja koguväärtuse kätte neljast eri array elemendist: $rida[''maju], $rida['autosid'], $rida['naisi'] ja $rida['lapsi']
kui sa saad need kõik koos ühes elemendis, siis näita parem koodi kuidas ta võtab sul need
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
11.01.2008 13:30:05
|
|
|
siiani saan ma kas tühjust või ühe nulli esimeseks väärtuseks, ülejäänud ikka tühjad.
$sql = mysql_query("SELECT count(*) AS kokku, 'id' AS asi FROM tabel1 where user_id='$sgm' AND x='0'
UNION
SELECT count(*), 'id' FROM tabel1 where friend='$sgm' AND x='0'
UNION
SELECT count(*), 'id' FROM tabel2 where user_id='$sgm'
UNION
SELECT count(*), 'id' FROM tabel2 where friend_id='$sgm'");
while($rida = mysql_fetch_assoc($sql)){
$rida["asi"] = $rida["kokku"];
$mitusinul = $rida["id"];
$mitusind = $rida["id"];
$mitusinutp = $rida["id"];
$mitusindtp = $rida["id"];
echo $rida["asi"];
} |
See on ka imelik, et kui ma echon välja selle $rida["asi"]; siis näidatakse mulle õigeid arve ühes reas... Aga kui määran sama asja neile muutujatele enne echot, siis saab esimene muutuja väärtuseks 0 ja ülejäänud on tühjad!
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
11.01.2008 14:05:38
|
|
|
kui sa selle query esitad phpmyadminis, kas sa saad õiged vastused õigesti tabelis ?
selle while sees muudaks ma nii asja:
$tulemus[$rida["asi"]] = $rida["kokku"];
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 10:58:28
|
|
|
Ma juba hakkan hullumeelselt naerma selle peale, sest seekord sain kõik väärtused 0 (nullid!)
Variandid, mida seal while() sees proovisin:
$mitusinul = $tulemus["id"];
$mitusind = $tulemus["id"];
$mitusinutp = $tulemus["id"];
$mitusindtp = $tulemus["id"];
// kõik nullid! |
$mitusinul = $rida["kokku"]["id"];
$mitusind = $rida["kokku"]["id"];
$mitusinutp = $rida["kokku"]["id"];
$mitusindtp = $rida["kokku"]["id"];
// kõik nullid! |
$mitusinul = $tulemus["asi"];
$mitusind = $tulemus["asi"];
$mitusinutp = $tulemus["asi"];
$mitusindtp = $tulemus["asi"];
// tühjus |
$mitusinul = $tulemus["kokku"];
$mitusind = $tulemus["kokku"];
$mitusinutp = $tulemus["kokku"];
$mitusindtp = $tulemus["kokku"];
// tühjus
|
Üks variant veel ajas väärtusteks "id" ja seda 4 korda.
Mul on selline tunne, et ma teen midagi VÄGA valesti või ei olegi see päring üleüldse tehtav...
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
julmu
HV kasutaja
liitunud: 20.12.2004
|
12.01.2008 12:35:57
|
|
|
Õige lahendus on umbes selline:
php:
|
$sql = mysql_query("SELECT count(*) AS kokku, 'mitusinul' AS asi FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*), 'mitusind' FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*), 'mitusinutp' FROM tabel2 where user_id='$sgm' UNION SELECT count(*), 'mitusindtp' FROM tabel2 where friend_id='$sgm'"); $$rida["asi"] = $rida["kokku"]; }
|
$$xxx tähendab, et tehakse uus muutuja, mille nimeks on $xxx väärtus.
Näiteks kui:
siis
tähendab, et tehakse uus muutuja
mille väärtuseks on 6
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
12.01.2008 12:53:15
|
|
|
ehk tulemus peaks olema siis et genereeritakse 4 muutujat: $mitusinul, $mitusind, $mitusinutp ja $mitusindtp ?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 14:08:41
|
|
|
mikk36 kirjutas: |
ehk tulemus peaks olema siis et genereeritakse 4 muutujat: $mitusinul, $mitusind, $mitusinutp ja $mitusindtp ? |
Just, kõigil neljal muutujal peab olema oma väärtus.
Nüüd sain väikese edu, aga tulemus on veel olematu:
$sql = mysql_query("SELECT count(*) AS kokku, 'id' AS asi FROM tabel1 where user_id='$sgm' AND x='0'
UNION
SELECT count(*), 'id' FROM tabel1 where friend='$sgm' AND x='0'
UNION
SELECT count(*), 'id' FROM tabel2 where user_id='$sgm'
UNION
SELECT count(*), 'id' FROM tabel2 where friend_id='$sgm'");
while($rida = mysql_fetch_assoc($sql)){
$$rida["asi"] = $rida["kokku"];
$mitusinul = $rida["kokku"][0];
$mitusind = $rida["kokku"][1];
$mitusinutp = $rida["kokku"][2];
$mitusindtp = $rida["kokku"][3];
echo "t: ".$rida["kokku"];
} |
See echo seal lõpus kuvas nii: t: 20t: 17t: 2t: 0 - ehk siis õiged arvud, aga need arvud ei lähe kuidagi muutujatesse, mis on selle echo ees! Muutujad on ikka kõik tühjad, esimne vaid on 0.
EDIT:
Kui [0] jms. aemele panin ["asi"], siis olid kõik 0, aga echo jäi muutumatuks.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
Valdars
HV veteran
liitunud: 22.02.2003
|
12.01.2008 14:09:57
|
|
|
Kui echo töötas õieti, siis ei saanudki muutujatesse midagi minna, kuna echod ühemõõtmelise massiivi üht väärtust aga muutujatesse proovid panna kahemõõtmelist. Tee prooviks "print_r($rida);" seal echo asemel ja pane tulemus siia.
|
|
Kommentaarid: 47 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
44 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 14:12:12
|
|
|
Valdars kirjutas: |
Kui echo töötas õieti, siis ei saanudki muutujatesse midagi minna, kuna echod ühemõõtmelise massiivi üht väärtust aga muutujatesse proovid panna kahemõõtmelist. Tee prooviks "print_r($rida);" seal echo asemel ja pane tulemus siia. |
Array ( [kokku] => 20 [asi] => id ) Array ( [kokku] => 17 [asi] => id ) Array ( [kokku] => 2 [asi] => id ) Array ( [kokku] => 0 [asi] => id )
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
12.01.2008 14:19:35
|
|
|
SGM, tundub et sa ei saa hetkel while tööpõhimõttest aru
while töötab korduvalt niikaua kuni tema () vahel olev annab false tulemuse
hetkel siis määratakse $mitusinul muutujasse sul esimene kord 2x, teine kord 1x väärtust, $mitusind muutujale antakse esimene kord 1x väärtus, teine kord 2x jne
korja need oma käsitsi lisatud read ära sealt ja proovi julmu viimati antud koodi
kui tahad debugida ning aru saada mis väärtused mis ajal mida omavad, siis tee nii:
enne while'i määra ära $i, pane väärtuseks 0
while'i sees echod $i väärtuse, $rida['asi'] ning $rida['kokku']väärtuse ja siis suurendad $i väärtust ühe võrra
näiteks
php:
|
$sql = mysql_query("SELECT count(*) AS kokku, 'mitusinul' AS asi FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*), 'mitusind' FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*), 'mitusinutp' FROM tabel2 where user_id='$sgm' UNION SELECT count(*), 'mitusindtp' FROM tabel2 where friend_id='$sgm'"); $i = 0; echo "asi:". $rida['asi']. "<br>"; echo "kokku:". $rida['kokku']. "<br><br>"; $i++; }
|
ning kuna sa jõudsid mainida et need praegused nimed asjadel on väljamõeldised ja reaalselt sa ei taha neid nimedena kasutada, siis on mõttekas määrata asja tulemus ühte muutujasse array'sse kasutades siis $tulemus[]["nimi"] = $rida["asi"]; ja $tulemus[]["kokku"] = $rida["kokku"]; omistamist
siis saad array, kus sul on $tulemus[0]["asi"] väärtuseks asja nimi ning $tulemus[0]["kokku"] väärtuseks asja koguarv
php:
|
$sql = mysql_query("SELECT count(*) AS kokku, 'mitusinul' AS asi FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*), 'mitusind' FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*), 'mitusinutp' FROM tabel2 where user_id='$sgm' UNION SELECT count(*), 'mitusindtp' FROM tabel2 where friend_id='$sgm'"); $tulemus[]["nimi"] = $rida["asi"]; $tulemus[]["kokku"] = $rida["kokku"]; }
|
viimati muutis mikk36 12.01.2008 14:25:05, muudetud 1 kord |
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 14:23:34
|
|
|
Sealt tuli nii:
0
asi:id
kokku:20
1
asi:id
kokku:17
2
asi:id
kokku:2
3
asi:id
kokku:0
Aga julmu koodis on mu muutujate nimed pandud andmebaasi tulpade nimedeks! Mul selliseid pole, mul vaid 'id' 4 korda...
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
12.01.2008 14:26:53
|
|
|
hm, nüüd siis küsimus et millest see 4x "id" tekib, kokku tulemused saad sa õieti kätte
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 14:36:20
|
|
|
mikk36 kirjutas: |
hm, nüüd siis küsimus et millest see 4x "id" tekib, kokku tulemused saad sa õieti kätte |
Hetkel jäi mul kood selline:
php:
|
$sql = mysql_query("SELECT count(*) AS kokku, 'id' AS asi FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*), 'id' FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*), 'id' FROM tabel2 where user_id='$sgm' UNION SELECT count(*), 'id' FROM tabel2 where friend_id='$sgm'"); $i = 0; echo "asi:". $rida['asi']. "<br>"; echo "kokku:". $rida['kokku']. "<br><br>"; $i++; }
|
Aga need 4 erinevat arvu on mul vaja järjest anda 4-le muutujale:
$mitusinul
$mitusind
$mitusinutp
$mitusindtp
Kuidagi üle mõistuse käib see hetkel... Ega siis ilmaasjata ei öelda, et kujundajad ja progejad peavad olema eri isikud, sest ühel isikul tavaliselt on vaid üks külg tugev.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
12.01.2008 14:42:14
|
|
|
SGM kirjutas: |
mikk36 kirjutas: |
hm, nüüd siis küsimus et millest see 4x "id" tekib, kokku tulemused saad sa õieti kätte |
Hetkel jäi mul kood selline:
php:
|
$sql = mysql_query("SELECT count(*) AS kokku, 'id' AS asi FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*), 'id' FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*), 'id' FROM tabel2 where user_id='$sgm' UNION SELECT count(*), 'id' FROM tabel2 where friend_id='$sgm'"); $i = 0; echo "asi:". $rida['asi']. "<br>"; echo "kokku:". $rida['kokku']. "<br><br>"; $i++; }
|
Aga need 4 erinevat arvu on mul vaja järjest anda 4-le muutujale:
$mitusinul
$mitusind
$mitusinutp
$mitusindtp
Kuidagi üle mõistuse käib see hetkel... Ega siis ilmaasjata ei öelda, et kujundajad ja progejad peavad olema eri isikud, sest ühel isikul tavaliselt on vaid üks külg tugev. |
no kui sind see $rida["asi] üldse ei huvita, siis pole mõtet seda isegi query'sse panna
väljasta ainult endale tähtis info
php:
|
$sql = mysql_query("SELECT count(*) AS kokku FROM tabel1 where user_id='$sgm' AND x='0' UNION SELECT count(*) FROM tabel1 where friend='$sgm' AND x='0' UNION SELECT count(*) FROM tabel2 where user_id='$sgm' UNION SELECT count(*) FROM tabel2 where friend_id='$sgm'"); $tulemus[] = $rida["kokku"]; } $mitusinul = $tulemus[0]; $mitusind = $tulemus[1]; $mitusinutp = $tulemus[2]; $mitusindtp = $tulemus[3];
|
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
12.01.2008 15:30:24
|
|
|
hahaha!
Nii palju jama ja õiendamist - lõpuks oli asi ikkagi lihtne ja hakkas tööle õigesti! Tänud!
Nagu ma aru sain, läheb neid $rida["asi] teemasid vaja siis, kui on vaja ka andmeid kätte saada? Mul üks teine lehekülg samuti 4 päringuga, kuna ei osanud kõike ühe päringu sisse toppida. Seal see piltide info. Kõik ühest ja samast tabelist, aga eri nurga alt, eri parameetrite põhjal 4 pildi ID ja faili nimi välja sikutada. Sellest oli ka kusagil siin 1 teema vist...
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
|