запрос в базу

Semen

Семён
запрос в базу

Есть таблица dirs
id pid url
1 0 dir1
2 1 dir1_1
3 2 dir1_1_1
4 3 dir1_1_1_1

http://www.site.net/dir1/dir1_1/dir1_1_1/dir1_1_1_1/

PHP:
$query="SELECT t4.* FROM dirs t1, dirs t2, dirs t3, dirs t4
WHERE t1.url='dir1'
AND t2.pid=t1.id AND t2.url='dir1_1'
AND t3.pid=t2.id AND t3.url='dir1_1_1'
AND t4.pid=t3.id AND t4.url='dir1_1_1_1'
LIMIT 1";
Как этот запрос можно написать по-другому?
 

chira

Новичок
а что нужно получить?
Код:
SELECT t4.* FROM dirs t4 
WHERE t4.url='dir1_1_1_1'
 

Semen

Семён
Автор оригинала: chira
а что нужно получить?
Код:
SELECT t4.* FROM dirs t4 
WHERE t4.url='dir1_1_1_1'
получить данный этой директоии (в реальной таблице больше полей)

Автор оригинала: Demiurg
А зачем его писать по другому ?
т.е. этот запрос написан правильно и упрощать/улучшать/оптимизировать не надо?
 

Demiurg

Guest
>т.е. этот запрос написан правильно и упрощать/улучшать/оптимизировать не надо?
преждевременная оптимизация - зло.
На счет правильно/не правильно надо смотреть из задачи.
 

Semen

Семён
Автор оригинала: Demiurg
>т.е. этот запрос написан правильно и упрощать/улучшать/оптимизировать не надо?
преждевременная оптимизация - зло.
На счет правильно/не правильно надо смотреть из задачи.
задача:
Я храню структуру сайта в базе, раньше использовал полный url в таблице (/dir1/dir1_1/dir1_1_1/dir1_1_1_1/
), но это неудобно при глубоком вложение директорий.
Сейчас хочу перейти на хранение в поле url только имени директории и это накладывает определенные сложности, например:
раньше делал так
PHP:
"SELECT * FROM dirs WHERE url=''/dir1/dir1_1/dir1_1_1/dir1_1_1_1/"
теперь приходиться так
PHP:
$url='/dir1/dir1_1/dir1_1_1/dir1_1_1_1/';
$dirs=explode( '/', $url);
$c=2;
	for ($i = 2; $i <= count($dirs); $i++)
	{
		if(''!=$dirs[$i])
		{
		 $q1.=",dirs t".$c;
		 $q2.=" AND t".$c.".pid=t".($c-1).".id AND t".$c.".url='".$dirs[$i]."'";
		 $c++;
		 }
	}
$query="SELECT t".($c-1).".* FROM dirs t1".$q1."
WHERE t1.url='".$dirs[1]."'".$q2."
LIMIT 1;";
может кто знает более изящное решения для этой задачи...
 

Demiurg

Guest
И все же, что тебе необходимо получить исходя из урла ?
 

Demiurg

Guest
твой запрос именно это и делает, только не понятно, зачем там limit
 
Сверху