Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL]1 zapytanie - 2 różne wyniki
Forum PHP.pl > Forum > Przedszkole
robos85
Mam taką sytuację:
W tabeli messages trzymam wiadomości. mają id, temat,treść,nadawcę,odbiorcę, status(0-nieczytana, 1-czytana)

Mogę jakoś 1 zapytaniem zliczyć ilość wszystkich wiadomości danego użytkownika, oraz zliczyć tylko te ze statusem 0?
Chodzi mi o optymalne rozwiązanie tego problemu:/ najlepiej właśnie w 1 zapytaniu.
nospor
  1. SELECT count(*) count, count(IF(STATUS=0,STATUS,NULL)) countnotreaded FROM messages
drPayton
np:
  1. SELECT count(id) AS wszystkie, (SELECT count(id) FROM wiadomosci WHERE STATUS = 1) AS aktywne FROM wiadomosci


@up: No tak, tak na pewno będzie wydajniej ;P Ale po mojemu czytelniej haha.gif
robos85
  1. SELECT count(*) count, count(IF(READ=0,READ,NULL)) countnotreaded FROM messages WHERE reciever=1

zamieniłem status na read - bo tam się pole nazywa u mnie lecz nie działa, mam taki błąd:
Cytat
#1064 - 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 'read=0,read,null)) countnotreaded from messages WHERE reciever=1' at line 1
nospor
read jest slowem zastrzezonym

  1. SELECT count(*) count, count(IF(`read`=0,`read`,NULL)) countnotreaded FROM messages WHERE reciever=1
robos85
ale nie zlicza mi rekordów z read=0 :/

Cały czas mi 0 pokazuje :/ a makilka rekordów z read=0 w bazie
nospor
moze dla reciever=1 nie masz read = 0

W php to odbierasz? Jak?
robos85
mam na 100%
obieram tak:
  1. <?php
  2. $sql_inbox_status=$db->query("select count(*) count, count(if(`read`=0,`read`,null)) toread from messages WHERE `reciever`='".sqlesc($_SESSION['id'])."'") or die($db->error);
  3.    // messages counter
  4.    $inbox_counter=$sql_inbox_status->fetch_assoc();
  5. $smarty->assign('toread',$inbox_counter['toread']);
  6. ?>


a w smarty:
  1. {if $toread==0}cos...{/if}
nospor
Cytat
mam na 100%
Mi na 100% ten kod tez dziala winksmiley.jpg
  1. <?php
  2. $inbox_counter=$sql_inbox_status->fetch_assoc();
  3. print_r($inbox_counter);
  4. ?>

Co wyswietla?
robos85
było
  1. `read`=0
a zadziałało:
  1. `read`='0'
smile.gif brakowało ' '
nospor
no bo jak sie pole statusowe robi polem tekstowym a nie liczbowym to potem sie ma takie chocki klocki winksmiley.jpg
robos85
a co oznacza to pole zastrzeżone o którym pisałeśquestionmark.gif
nospor
to, ze nie mozesz go tak normalnie uzywac w zapytaniu, bo ono ma swoje funkcje

http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.