 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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: 549
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: 549
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 |
|
| |
|