![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Mam sobie nastepujace drzewko w bazie:
/ck/ /ck/teatry /ck/teatry/Jakis teatr /ck/teatry/Jakis inny teatr I teraz musze na podstawie adresu - ForceType - np takiego: .../ck/teatry Sprawdzic czy w drzewie jest taki element i jezeli jest to pobrac jego ID. Struktura SQL wyglada tak: [sql:1:7b5ae2c8be]CREATE TABLE elements ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, class_id INT UNSIGNED NOT NULL, name VARCHAR(128), PRIMARY KEY(id) ); CREATE TABLE elements_relations ( first_id INT UNSIGNED NOT NULL, second_id INT UNSIGNED NOT NULL, depth INT UNSIGNED NOT NULL, PRIMARY KEY( first_id, second_id ) );[/sql:1:7b5ae2c8be] ... Gdzie w elements trzymam: nazwy elementow w drzewie oraz typ klasy - folder/news itp - a w relacjach: powiazania elementow w drzewie. Jest to prawie dokladnie to co przedstawil tutaj dragon: http://webdeveloper.pl/forum/read.php?f=3&...i=711&t=711&v=f Czyli jeszcze raz: jak na podstawie podanej sciezki odnalezc ID elementu na ktory ona wskazuje (sciezka) :?: |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hmmm, a czy upierasz sie przy takiej strukturze tabel?
Ja mam takie drzewko: [sql:1:987e615482]CREATE TABLE `www_06` ( `id` int(4) NOT NULL auto_increment, `ik` int(4) NOT NULL default '0', `ip` int(4) NOT NULL default '0', `tytul` text default NULL, `text` text default NULL, `ststus` tinyint(4) default NULL, UNIQUE KEY `id` (`id`), PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=1 ;[/sql:1:987e615482] gdzie ik to pozycja w drzewie, ip zawiera id ojca (parent). Czyli to bedzie tak: Kod id ik ip tytul text status
1 0 0 ck NULL 1 2 1 1 teatry NULL 1 3 2 2 Jakis teatr NULL 1 4 2 2 Jakis inny teatr NULL 1 I "ck" ma "id=1", "ik=0" oraz "ip=0" bo jest pierwsze w strukturze, "teatry" ma "id=2", "ik=1" bo jest drugie w strukturze oraz "ip=1" bo należy do struktury "ck"(jego ojciec to "ck") "Jakis teatr" ma "id=3", "ik=2" bo jest trzecie w strukturze oraz "ip=2" bo należy do struktury "teatry" "Jakis inny teatr" ma "id=4", "ik=2" bo jest trzecie w strukturze oraz "ip=2" bo należy do struktury "teatry" i tak dalej. Pozdrawiam -------------------- freeBSD::ORACLE::PHP::Java
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Wszystko ladnie tylko, ze mi nie chodzi o strukture drzewa, a o pobranie id elementu w drzewie na podstawie pobranej od usera sciezki.
Jak dostane np: /ck/teatry to chcial bym dostac id=2. I wlasnie tu jest problem - aby jak najefektywniej pobrac to id. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 15.12.2003 Skąd: Mikołów Ostrzeżenie: (0%) ![]() ![]() |
[php:1:83479ef23c]<?php
$tmp = explode("/",$sciezka); $what = $tmp[count($tmp)-1]; $wynik = mysql_fetch_array(mysql_query("SELECT `id` FROM `www_06` WHERE `tytul` = '".$what."'")); echo $wynik[0]; ?>[/php:1:83479ef23c] może tak ? -------------------- Workshop: FC2/WinXp SP1 | Apache 2.0.50 | PHP 5.00 | MySQL 4.0.20 | Zend Studio 3.5 :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
To odpada bo moze byc tak, ze drzewo bedzie wygladac np. tak:
... /ck/teatry/Jakis teatr ... /ck/program/Jakis teatr I wtedy wyjda zle wyniki. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Wiesz co, widziałem kiedyś przykład wielowątkowej listy dyskusyjnej w książce "php Receptury" z Helionu.
http://helion.pl/ksiazki/phprec.htm ftp://ftp.helion.pl/przyklady/phprec.zip rozdzial 10 i wydaje mi sie że to mże być Ci przydate. Pozdrawiam. -------------------- freeBSD::ORACLE::PHP::Java
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
w klasie, którą właśnie kończe, wygląda to tak:[php:1:dccd66dbd3]<?php
class xxx //... protected function _exists() { $parts=explode("/", $this->_path); $parent=$this->_root; $this->_trans->start(); foreach($parts as $part) { if(!$part) continue; $name=$this->_adodb->Quote($part); $rs=$this->_adodb->Execute(sprintf($this->_getChildByNameSQL ,$name ,$parent)); if(!$rs)//Error ![]() { $this->_error("DBERROR"); $this->_trans->rollback(TRUE); return NULL; } if($rs->RowCount()!=1)//No such node { return NULL; } $parent=intval($rs->fields[0]); $rs->Close(); } $this->_trans->commit(); $this->__id=$parent; return $parent; } protected $_getChildByNameSQL = "SELECT id FROM nodes WHERE name='%s' AND parent=%d;"; //... ?>[/php:1:dccd66dbd3]U Ciebie, jeżeli nie stosujesz pola parent wszystko kończy się na zmienieniu query (to będzie coś w rodzaju):[sql:1:dccd66dbd3]select nodes.id from nodes, asociations where nodes.id=asociations.second_id and asociations.depth=1 and nodes.name='%s' and asociations.first_id=%d[/sql:1:dccd66dbd3] |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Dzieki przejze sobie te rozwiazania
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:44 |