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
 

intrebare interogare mysql
Vezi mesajul original
Du-te la pagina 1, 2  Următoare
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> MySQL
Subiectul anterior :: Subiectul următor  
Autor Mesaj
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 1:37 pm    Titlul subiectului: intrebare interogare mysql  

salut,
am o tabel in baza de date structurata astfel:

Cod: CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `parent` int(11) default '0',
  `level` mediumint(9) default '0',
  `active` enum('Yes','No') default 'No',
  `data` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19;

pe aceasta tabel as vrea sa fac o interogare din care sa-mi scot numele categoriei si parintele acesteia, DAR la parinte vreau sa-mi afiseze numele categoriei parinte nu id-ul.

exista vreo modalitate sa fac acest lucru intr-o singura interogare????

Cod: select
      *               
   from
      categories    
   where
      parent = $parent
   order by
       data desc
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 1:48 pm    Titlul subiectului:  

si daca dai echo $row['name']; nu iti afiseaza continutul coloanei name?
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 2:00 pm    Titlul subiectului:  

ba da normal ... ce vreau eu este urmatorul lucru....
sa-mi scot rezultatele interogarii intr-un tabel:

nr crt | categorie | parinte (numele_parintelui nu id-ul)
1. cat1 daca nu are parinte sa-mi apara "NULL"
2. cat2 cat1(nu 1)
3. cat3 cat2 (nu 2)


categoria 1 nu are parinte asa ca o sa-mi apara NULL sau Fara parinte, categoria 2 are ca parinte categoria 1 si in coloana parinte vreau sa-mi apara numele categoriei pe care o are ca si parinte nu id-ul acesteia
.... si asa mai departe

nu sh daca intelegeti ce vreau...poate n-am explicat bine
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 2:10 pm    Titlul subiectului:  

ia da tu o bucata de cod sa vedem ce ai facut si de ce nu iti afiseaza ce vrei tu si asa ne lamurim mai bine...
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 2:26 pm    Titlul subiectului:  

Cod:
$query = "
     select
           *
     from
          categories
     where
          parent = $parent
     order by
          data desc
";
$result = $sql -> q("query"); //mysql_query
$row = $sql -> o("$result"); //mysql_fetch_object

while($row){
    echo $row->id.". ".$row->name." => ". $row->parent."<br />";
    $row = $sql -> o("$result"); //mysql_fetch_object
}


am renuntat la ideea cu tabelul ca nu aia e importanta...

no...la echo $row->parent as vrea sa-mi afiseze numele categoriei parinte nu id-ul acesteia.... dar nu sh cum sa fac... sau daca macar este posibil

asa arata tabela:


CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`parent` int(11) default '0',
`level` mediumint(9) default '0',
`active` enum('Yes','No') default 'No',
`data` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

--
-- Dumping data for table `categories`
--

INSERT INTO `categories` (`id`, `name`, `parent`, `level`, `active`, `data`) VALUES
(9, 'tarife', 6, 1, 'Yes', '2008-07-29'),
(2, 'afacere', 0, 0, 'Yes', '2008-07-29'),
(6, 'casa', 0, 0, 'Yes', '2008-07-30'),
(5, 'comunitate', 0, 0, 'Yes', '2008-07-28'),
(8, 'consiliere', 6, 1, 'Yes', '2008-07-30'),
(10, 'legislatie', 6, 1, 'Yes', '2008-07-28'),
(11, 'info', 8, 1, 'Yes', '2008-07-30'),
(12, 'consultant', 8, 1, 'Yes', '2008-07-29'),
(13, 'center', 8, 1, 'Yes', '2008-07-28'),
(14, 'sfaturi', 8, 1, 'Yes', '2008-07-27'),
(15, 'faq', 8, 1, 'Yes', '2008-07-26'),
(16, 'dictionar', 8, 1, 'Yes', '2008-07-25');


se intelege ceva? adik in loc sa-mi afiseze "8. consiliere => 6" sa-mi afiseze "8. consiliere => casa"
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 2:46 pm    Titlul subiectului:  

pai nu inteleg o chestie
(2, 'afacere', 0, 0, 'Yes', '2008-07-29'),

primul 0 inseamna ca nu are parinte? si al 2-lea 0 inseamna ca e primul nivel adica e parent?

8, 'consiliere', 6, 1, 'Yes', '2008-07-30'),

6 inseamna ca e 'casa' si 1 ca e primul dupa casa?

daca asa ai gandit structura, nu ai cum sa afisezi direct din baza de date, trebuie sa bagi toti parintii intr-un array si sa ii afisezi in functie de cheie->id
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 2:51 pm    Titlul subiectului:  

da... asa am gandit .... :cry:

inteleg .... la partea cu array-ul m-am gandit dar faza e ca nu pot folosi decat o singura interogare ...

atunci nu mai afisez parintele deloc... multumesc pt raspunsuri ... am crezut ca se poate face un artificiu ceva
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 3:21 pm    Titlul subiectului:  

pai e ok, folosesti o singura interogare dar bagi totul intr-un array nu le afisezi inca, apoi din acel array extragi in alt array parintii si apoi faci afisarea folosindu-te de cele 2 array-uri cel cu datele din bd si cel cu parintii...

eventual faci un cache care sa contina parintii si il actualizezi doar cand modifici structura sql...
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 3:26 pm    Titlul subiectului:  

aha...inteleg...

dar partea cu cache-ul nu o inteleg...sau mai bine zis nu sh cum sa fac cache ...
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 3:40 pm    Titlul subiectului:  

pai un cache e bun la optimizare, daca stii ca ai nevoie de aceeasi interogare la sql in mai multe pagini, atunci decat sa faci acea interogare de fiecare data in acele pagini mai bine le iei din cache ca e mai repede...

un cache poate fi un fisier text sau o variabila globala (de obicei de sesiune)

acum daca datele stocate in cache sunt de ordinul mb e de preferat in fisier, daca sunt mai mici eu le bag in sesiune (asta tine de optimizarea memoriei, pe server poti avea alocat doar 8 Mb din php si trebuie sa ai grija cum folosesti memoria sa nu te trezesti ca tot stochezi in variabile de sesiune si la un moment dat serverul iti da eroare ca nu mai are memorie disponibila...)
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1762
Locație: Sibiu

Trimis: Mie Iul 30, 2008 3:41 pm    Titlul subiectului:  

Poti sa faci join cu aceeasi tabela si sa extragi acelasi camp din ambele parti ale join-ului, punandu-i un alias la tabela:
Cod:
SELECT categories.name AS cat_name, parents.name AS parent_name FROM categories INNER JOIN categories AS parents ON categories.parent = parents.id WHERE (cum vrei tu conditia)
Sus  
Birkoff



Data înscrierii: 18/Mar/2004
Mesaje: 2575
Locație: Bucuresti

Trimis: Mie Iul 30, 2008 3:47 pm    Titlul subiectului:  

da uite mihaita are o idee geniala :lol: ma gandisem la join dar nu stiu din ce motive am zis ca nu merge si am spus de array...

si revenind la optimizare, este bine sa gandesti codul in asa fel incat sa nu faci echo decat la sfarsit dupa ce ai terminat cu toate prelucrarile, adica daca faci preluare date, verificare, afisare mesaje, interogare, afisare rezultate din interogare, alte prelucrari, alte afisari... atunci iti va fi greu la depanare si nu vei putea refolosi acel cod la alte proiecte decat cu multe modificari in cod...

e mai bine sa faci toate verificarile, interogarile si ce mai ai tu la inceput si apoi trimiti totul la pagina printr-un singur echo...
citeste http://en.wikipedia.org/wiki/Model_view_controller o sa te ajute
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Mie Iul 30, 2008 3:58 pm    Titlul subiectului:  

va multuesc pentru raspunsuri ....

metoda lui mihaitha mi se pare mai simpla ... dar apare o problema aici ... nu afiseaza categoriile cu parintele = 0
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1762
Locație: Sibiu

Trimis: Joi Iul 31, 2008 9:29 am    Titlul subiectului:  

Atunci inlocuieste in interogare INNER JOIN cu LEFT JOIN
Sus  
gabyrusu



Data înscrierii: 11/Iun/2006
Mesaje: 45
Locație: Brasov

Trimis: Joi Iul 31, 2008 10:41 am    Titlul subiectului:  

merge :D perfect ... va multumesc ... trebuie sa invat mai bine sa lucrez cu join ca vad ca e foarte folositor
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 Du-te la pagina 1, 2  Următoare
Pagina 1 din 2


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