Jump to content
php.lv forumi

Saskaitīt bez COUNT


Artenis

Recommended Posts

Vai ir iespējams saskaitīt konkrētos rows nelietojot COUNT iekš query="select * ...."; Bišk ne tā iesāku vienu lietu darīt un tādēļ šāds variants būtu svētīgākais, kur var saskaitīt rows bez COUNT iekš query... Paldies par info!

Link to comment
Share on other sites

piemeeram ...

$datu_masa = mysql_query("SELECT id,pid,sid,tid,lid FROM tabulas");
$cik_rindiņas_atgrieztas = mysql_num_rows($datu_masa);

Un vispār manuāli tas ir rakstīts ... http://lv.php.net/mysql

mysql_num_rows — Get number of rows in result

Un ja ir traki gruuti ar angļu valodu, paņemam gūgli palīga ... (neieteiktu ... traks var palikt)

Edited by Klez
Link to comment
Share on other sites

Nu neskaitīt bez count(*), ja tik tiešām skaitu tik vajag var būt diezgan ēdelīgs pasākums. MySQLā, cik atceros, count(*) vienkārši no tabulas varēja nolasīt kaut kā lētā veidā, jo tas tika glabāts un sinhronizēts (???). Palabojiet, ja es te kaut ko laižu dēlī :)

Otrkārt ir tas, ka count(*) atgriež tieši count un viss. A citādi tev nāksies tos idus izgriezt cauri tīklam un nedod Dies vēl izdomāsi nevis tikai idus, bet visu rindu :)

Tas būtu salīdzināms ar to, ka Tu tā vietā, lai telefongrāmatā saskaitītu esošos telefona numurus, ņem un visus tos pārraksti :)

 

Un vai tad MySQLā nebija iespēja rakstīt inline view:

SELECT count(*) FROM (

SELECT blahbalah

FROM blahblah)

 

Iespējams gan tas bija atkarīgs no versijas, nav laika tagad dokus pētīt.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Man liekas, ka no šitā nav pilnīgi nekādsa jēgas:

No tā ir jēga tad, ja Tev ir gatavs vaicājums, kuru Tu negribi/nevari nekā modificēt, bet gribi izmantot, lai noskaidrotu, cik rindas atgriež, tad oriģinālo ieliec tai apakšvaicājumā un aiziet.

Arī garantija lielāka, ka kādu distinct nepalaidīsi garām.

 

Vispār neizmantot count(*) kā šķiru selectos es tiešām neredzu nekādu jēgu.

 

Gints Plivna

http://datubazes.wordpress.com

Edited by Gints Plivna
Link to comment
Share on other sites

Ja pieņemam ka 'id' ir vienmēr eksistējoša (autincrement/sekvence), tad var izmantot, bet tā COUNT(lauks) atgriež 'lauks' ne-NULL vērtību ieraukstu skaitu.

Attiecīgi ja lauks ir iespējams ar NULL vērtībām tad COUNT(*) un COUNT(lauks) var atšķirties..

 

 

p.s. MySQL gadijumā COUNT(*) uz InnoDB ir source of evil..

Link to comment
Share on other sites

Id var pat būt vienmēr eksistējošs, bet neaizpildīts konkrētajā vaicājumā, piemēram, dēļ ārējā savienojuma ;)

Tā kā tiešām vien`mer to ir vērts atcerēties - "atgriež 'lauks' ne-NULL vērtību ieraukstu skaitu".

 

p.s. MySQL gadijumā COUNT(*) uz InnoDB ir source of evil..

 

Mhm varbūt sīkāk varētu? :)

 

Vai arī tas bija tas ko stāstīja Jay Pipes, ka lasa cauri visu tabulu? Es tā arī nesapratu no viņa atbildes, ja tur ir PK indekss, tad viņš lasa no indexa vai nē? Jo nu teiksim man kā pieradušam pie Oracles, variants, ka count(*) iegūst pēc PK indexa pilnībā apmierina, iespējams, ka cilvēkiem, kas ir pieraduši pie MySQL (ISAM?) tabulu momentānā skaita atgriešanas, tas liekas neparasti :)

 

Gints

 

P.S. Šeit gan laikam ir arī atbilde uz manu jautājumu

P.P.S. Manuprāt gan jebkurš count(*) patiesībā ir atskaite un atskaites neviens cilvēks normāli katrā reizē neiegūst un pārāk bieži nepieprasa :)

Edited by Gints Plivna
Link to comment
Share on other sites

×
×
  • Create New...