Avatar billede lobster Nybegynder
23. april 2003 - 14:19 Der er 21 kommentarer og
2 løsninger

mysql_sum_rows på flere tabeller

Hey...

Jeg skal en lille tæller agtig noget som holder styr på hvor mange poster der er i nogle tabeller.

Her i min kode :
$antaltest = "SELECT * FROM tabel" ;
$resantalartfinal = mysql_query("$antaltest") ;

$antalartialt = mysql_num_rows($resantalartfinal);

Det virker også fint, men så hvis jeg sætter en tabel i mere går det galt :

$antaltest = "SELECT * FROM tabel1, tabel2" ;
$resantalartfinal = mysql_query("$antaltest") ;

$antalartialt = mysql_num_rows($resantalartfinal);

I de 2 tabeller er der 4 rows i hver, som så gir 8 ialt, men den skriver 16.


Håber i har en ide..

//Lobster
Avatar billede fcknet Nybegynder
23. april 2003 - 14:21 #1
Prøv dette:

$antaltest1 = "SELECT * FROM tabel1" ;
$resantalartfinal1 = mysql_query("$antaltest1") ;

$antalartialt1 = mysql_num_rows($resantalartfinal1);

$antaltest2 = "SELECT * FROM tabel2" ;
$resantalartfinal2 = mysql_query("$antaltest2") ;

$antalartialt2 = mysql_num_rows($resantalartfinal2);
$antal = $antalartialt1+$antalartialt1;

$antal = 8 nu?
Avatar billede Slettet bruger
23. april 2003 - 14:25 #2
$sql = "SELECT count(
distinct tb1.id ) + count(
distinct tb2.id )
FROM tb1, tb2
where 1";
$result = mysql_query($sql);
$rows = mysql_result($result,0);
Avatar billede erikjacobsen Ekspert
23. april 2003 - 14:27 #3
Lav to forespørgsler, men gør det som

$antaltest = "SELECT count(*) as antalt FROM tabel" ;

Så kan du lægge tallene sammen i PHP.
Avatar billede jakoba Nybegynder
23. april 2003 - 14:33 #4
i mysql kan du lave kommandoen

$antaltest = "
    SELECT ( count(DISTINCT tabe1._dinprimaernoegleitabel1)
          + count(DISTINCT tabe2._dinprimaernoegleitabel2)
          ) as antalt
    FROM tabel,tabel2
" ;

men jeg tror erikjacobsen's 2 separate sql_kald vil køre hurtigere. især når der er mange rækker i hver tabel.

mvh JakobA
Avatar billede Slettet bruger
23. april 2003 - 14:39 #5
Jakoba>>yir... men det er først nice i mysql 4.0
$sql = "SELECT count(a)
UNION ALL
SELECT id as a from tb1 where 1
UNION ALL
  SELECT id as a from tb2 where 1";

Men jeg tvivler, at lobster har mysql 4.0 installeret!?
Avatar billede erikjacobsen Ekspert
23. april 2003 - 14:45 #6
Godt nok kan en (My)Sql server optimere sine forespørgsler, men man kunne
frygte at din regin (og din jakoba, hvís den virker) vil være meget langsomme.
En Count(*) er megahurtig - men kræver så et par SQL-kald
Avatar billede Slettet bruger
23. april 2003 - 14:49 #7
erikjacobsen>>Den er meget langsom... har test med to tabeller... 1 række og 9 rækker... fjernede distinct og fik så 18 rækker....
forestiller man sig så to tabeller med 1000 og 100 rækker....
det er 100.000 rækker som mysql skal tygge sig igennem!
Avatar billede lobster Nybegynder
23. april 2003 - 15:06 #8
Uhh... sorry drenge! jeg glemte at fortælle, at de tabeller som jeg skal ha "lagt sammen" er vilkårlige dvs. tabel navnene får jeg fra en anden tabel..
Det er til et system hvor brugeren selv opretter tabeller i db'en, så det dur ikke med faste navne.
Avatar billede erikjacobsen Ekspert
23. april 2003 - 15:07 #9
"et system hvor brugeren selv opretter tabeller" <- det tyder på rigtig
dårligt database design.

Men du kan da sagtens lave en løkke hvor du selv indsætter navnene på
tabellerne - og fortsat lægger sammen i PHP.
Avatar billede lobster Nybegynder
23. april 2003 - 15:27 #10
Ja jeg ved det kunne laves smartere, men det drejer sig om kun om nogle kategorier på et site -> og mht. andre ting er det den nemmeste måde...

Ja jeg prøver lige at flette lidt løkker sammen. Jeg undrer mig dog stadig over at det ikke dur med den query hvor man sætter flere tabller ind og adskiller dem med et ',' ...
Avatar billede Slettet bruger
23. april 2003 - 15:32 #11
Ja jeg prøver lige at flette lidt løkker sammen. Jeg undrer mig dog stadig over at det ikke dur med den query hvor man sætter flere tabller ind og adskiller dem med et ',' ... >>> Det virker skam... bare meget meget langsomt!

Min kommentar: 23/04-2003 14:39:17
Er nok det du leder efter hvis det skal gøres i et query... men mysql understøtter først "UNION" i version 4.0, som jeg ikke engang selv har installeret!
Avatar billede lobster Nybegynder
23. april 2003 - 15:39 #12
Nej har desværre ikke Mysql 4.0.. tror heller den fremtidig WebHo' som skal hoste sited har.. men jeg prøver..
Avatar billede lobster Nybegynder
23. april 2003 - 16:11 #13
Hvad er der så galt med den her query? :

SELECT count (DISTINCT Mønter.artid) + count (DISTINCT Medaljer.artid) + count (DISTINCT Vægtæpper.artid) + count(DISTINCT fake_tabel.artid)
FROM Mønter , Medaljer , Vægtæpper , fake_tabel

Fejlen :

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in D:\Home2\wwwroot\lobster.dk\www\config.php on line 39
Avatar billede Slettet bruger
23. april 2003 - 16:14 #14
smid en parantes uden om alle count()....
og prøv at test det i PHPMYADMIN
Avatar billede erikjacobsen Ekspert
23. april 2003 - 21:13 #15
<?
  $tabeller = Array("tabel1","tabel2","tabel77");
  $taeller = 0;

  foreach ($tabeller as $tabel) {
    $sql ="SELECT count(*) as antal FROM $tabel";
    $result = mysql_query($sql) or die(mysql_error());
    $row = mysql_fetch_array($result);
    $taeller += $row['antal'];
    mysql_free_result($result);
  }
?>
Avatar billede fcknet Nybegynder
24. april 2003 - 07:13 #16
Det er stort set det jeg skrev!
Avatar billede erikjacobsen Ekspert
24. april 2003 - 10:05 #17
Nemlig, fcknet - men det er åbenbart ikke helt forstået hos spørgeren.
Bare rolig - det er dit svar og dine point ;)
Avatar billede fcknet Nybegynder
24. april 2003 - 14:32 #18
Jeg er skam rolig :)

Jeg er ikke vild efter at få points. Jeg vil lære PHP - og derfor betyder det meget for mig at du siger at det er det samme :)
Fordi det betyder at jeg også har fattet koden :D
Avatar billede lobster Nybegynder
27. april 2003 - 18:12 #19
det var erikjacobsen's forslag som jeg fik op at køre.. så.. ligger du et svar så du kan få nogle points..

regin og fcknet får også lige en lille bid af kagen for deres tid.

Mvh Lobster
Avatar billede lobster Nybegynder
27. april 2003 - 18:16 #20
Hmm.. hvad skete der lige med den point fordeling..damn..
Avatar billede Slettet bruger
27. april 2003 - 18:20 #21
http://www.eksperten.dk/spm/345419 <--- så kan folk selv ligge et svar til de point de har fortjent...
Avatar billede erikjacobsen Ekspert
27. april 2003 - 18:29 #22
Tak, jeg ønsker ikke point.
Avatar billede Slettet bruger
27. april 2003 - 18:35 #23
Eric>>Havde jeg sådan set regnet ud... men jeg ønsker dem heller ikke... fcknet>> smid lige et svar derinde!?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester