Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Problema extragere date din db
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Subiectul anterior :: Subiectul următor  
Autor Mesaj
.php



Data înscrierii: 04/Mar/2008
Mesaje: 12

Trimis: Mar Mar 04, 2008 9:13 pm    Titlul subiectului: Problema extragere date din db  

Lucrez la un site unde orice user inregistrat poate adauga un mesaj in baza de date. ID-ul userului si numele lui sunt stocate intr-o tabela. Am scris codul, si imi arata in browser un tabel cu 2 coloane, pe prima IDul userului si pe a doua numele.

Vreau sa mai fac o coloana, in care sa imi apara nr de mesaje introduse de fiecare user. Problema este ca in baza de date nu am un camp care sa numere acest lucru, ci unul cu numele autorului fiecarui mesaj.

Daca userul e logat, pentru a-i aparea nr de mesaje postate folosesc :
Cod: select count(*) from dd_items where Contributor = '$_SESSION[username]'

Dar cum fac sa citesc de cate ori a postat un user oarecare ? Cu ce inlocuiesc $_SESSION[username] ? Se poate face acest lucru?
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 587
Locație: Drobeta Turnu Severin

Trimis: Mar Mar 04, 2008 10:56 pm    Titlul subiectului:  

Dupa ce identifici userul oarecare ?
Pentru toti faci:
SELECT contributor, count(*)
FROM dd_items
GROUP BY contributor
ORDER BY contributor ;
Sus  
griffin



Data înscrierii: 07/Dec/2006
Mesaje: 83

Trimis: Mie Mar 05, 2008 12:37 am    Titlul subiectului:  

Daca am inteles eu bine tu vrei ca langa tabelul tau (cel afisat in browser )
sa arate ceva de genul:
ID___NUME___NR_POSTARI
1____XXX ____10
2____YYY_____5
Pentru a face asa modifici un pic query-ul tau si folosindu-te de ce a spus Dechim mai sus vei avea

SELECT u.id,u.nume,COUNT(*) FROM tabel_cu_utilizatori AS u, dd_items AS d
WHERE d.Contributor=u.nume GROUP BY u.id

Mai explicit faci un join intre tabelul cu utilizatori(nestiind cum ii spune i-am zis tabel_cu_utilizatori) si tabelul dd_items (banuiesc ca aici pastrezi mesajele si numele celui care le introduce (desi daca e asa ar fi bine sa pui id-ul utilizatorului nu numele lui) ).Query-ul extrage id,nume din primul tabel si numara de cate ori apare acest id in dd_items --- cam ceea ce ai tu nevoie
Sus  
.php



Data înscrierii: 04/Mar/2008
Mesaje: 12

Trimis: Mie Mar 05, 2008 5:32 pm    Titlul subiectului:  

vroiam de fapt sa intreb cum identific acel user oarecare ? :D
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 587
Locație: Drobeta Turnu Severin

Trimis: Mie Mar 05, 2008 5:52 pm    Titlul subiectului:  

Intelege ce ti-a spus griffin !
Trebuie sa ai un camp de legatura intre cele doua tabele. Se pare ca la tine e "nume" (deci dupa "nume" identifici "acel user oarecare"), ar fi mai bine sa ai legatura prin ID :
- tabela utilizatori: id, nume, ...
- tabela mesaje: id, mesaj
nu
- tabela mesaje: nume, mesaj
Sus  
.php



Data înscrierii: 04/Mar/2008
Mesaje: 12

Trimis: Mie Mar 05, 2008 7:09 pm    Titlul subiectului:  

am pus query-ul, mai am o singura intrebare.

Ce pun in tabel, sa apara langa ID si USER ?

La USER/ID am pus $rows['USER/ID'], acum ce pun, pt afisarea counturilor de la fiecare user ?
Sus  
griffin



Data înscrierii: 07/Dec/2006
Mesaje: 83

Trimis: Mie Mar 05, 2008 8:48 pm    Titlul subiectului:  

Pai poti sa faci ceva de genul
:sa zicem ca scoti din tabelele in ordinea asta id,nume,count(*)
daca scoti o matrice asociativa
( $row =mysql_fetch_array($query,MYSQL_ASSOC))

atunci poti accesa id spre exemplu asa: $row['id'] sau $row[0].Pentru count(*) poti accesa cu $row[2].
Altfel (mai elegant) faci SELECT id,nume, COUNT(*) AS "Contor" FROM.....
si afisezi numarul de mesaje cu $row['Contor'] ---practic nu faci decat sa creezi un alias pentru COUNT(*) pe care il denumesti "Contor"
Sus  
.php



Data înscrierii: 04/Mar/2008
Mesaje: 12

Trimis: Joi Mar 06, 2008 6:58 pm    Titlul subiectului:  

nu mi-a iesit. am urmat instructiunile de aici, dar: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /storage0/home/numesite/www/membri.php on line 10
Sus  
griffin



Data înscrierii: 07/Dec/2006
Mesaje: 83

Trimis: Joi Mar 06, 2008 7:42 pm    Titlul subiectului:  

Fii atent.Ai urmatoarele 2 tabele (cu tot ce tine de ele)

CREATE TABLE IF NOT EXISTS `tabel1` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;


INSERT INTO `tabe1` (`id`, `user`) VALUES
(1, 'User1'),
(2, 'User2'),
(3, 'user3'),
(4, 'user4'),
(5, 'user5'),
(6, 'user6');

si

CREATE TABLE IF NOT EXISTS `tabel2` (
`id_user` int(11) NOT NULL,
`comentariu` varchar(220) default NULL,
`id_rand` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id_rand`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

INSERT INTO `tabel2` (`id_user`, `comentariu`, `id_rand`) VALUES
(1, NULL, 1),
(1, NULL, 2),
(1, NULL, 3),
(2, NULL, 4),
(2, NULL, 5),
(3, NULL, 6),
(4, NULL, 7),
(6, NULL, 8 ),
(6, NULL, 9);

Daca rulezi urmatorul query:

SELECT t1 . * , COUNT( * ) AS 'Numar' FROM `tabe1` AS t1, tabel2 AS t2
WHERE t1.id = t2.id_user GROUP BY t1.id

iti va rezulta:

id__user_____Numar
1___User1___3
2___User2___2
3___user3___1
4___user4___1
6___user6___2

Sfat: cand iti da erori la un query in Php fa si tu echo la acel query ia ce-ti afiseaza si ruleaza-l in phpMyAdmin,linie de comanda MySql (sau ce folosesti tu) si vezi din ce motive nu merge
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community