PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): « 1 [2]

> Найдено сообщений: 22
nofx Отправлено: 20 Апреля, 2011 - 19:43:23 • Тема: Помогите отобразить результаты SQL запроса в виде 3-уровневого списка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 868
Вроде получилось, список выводится как я хотел.Привожу код ( только он "быдлокодовский и непонятный" как-то модно говорить , так что извиняюсь - я новичок):
PHP:
скопировать код в буфер обмена
  1.  
  2. //запрос формирует группы школ по экскурсии с id_news
  3. $result_school = mysql_query("SELECT school,id_school FROM school WHERE id_school in          
  4. (SELECT id_school FROM schkolnik WHERE id_schkolnik in
  5. (SELECT id_schkolnik FROM orders WHERE id_news = 5) GROUP BY id_school)");
  6.  
  7. //запись в массив каждой школы
  8. while ($row_school = mysql_fetch_array($result_school))
  9.          {
  10.  $one[]=array("id_school"=>$row_school[id_school], "school"=>$row_school[school]);
  11.          }
  12.  
  13. //запрос формирует школьников для каждой группы школ по экскурсии с id_news
  14. $result_schkolnik = mysql_query("SELECT fam, name, otchestvo,id_school FROM schkolnik WHERE id_school in
  15. (SELECT id_school FROM schkolnik WHERE id_schkolnik in
  16. (SELECT id_schkolnik FROM orders WHERE id_news = 5)
  17. GROUP BY id_school)
  18. ORDER BY id_school asc");
  19.  
  20.  //запись в массивы школьников для каждой id_school
  21.  
  22. while ($row_schkolnik = mysql_fetch_array($result_schkolnik))
  23.                 {
  24. //формируем двумерный массив $two [номер][фамилия.имя.отчество]
  25.                        
  26.         $two[] =array("fam" => $row_schkolnik[fam],
  27.                                    "name" => $row_schkolnik[name],
  28.                        "otchestvo"=> $row_schkolnik[otchestvo],
  29.                       "id_school" => $row_schkolnik[id_school]);
  30.  
  31.                         }
  32.  
  33. $n1=0;$n2=0; //n1,n2 - нумерация
  34. for ($i=0; $i<count($one); $i++)
  35.            {
  36.         $n1++;
  37.               echo $n1.'-'.$one[$i]["school"].'</br>';
  38.    //выводим школьников этой школы, то есть $two[$i][id_school]==$one[$i][id_school]
  39.         for($j=0; $j<count($two); $j++)
  40.                         {
  41.                        if($two[$j]["id_school"]==$one[$i]["id_school"])
  42.                                 {
  43.                                 $n2++;
  44.                                 echo '__'.$n2.'-'.$two[$j]["fam"].'</br>';
  45.                                 }
  46.                         }
  47.        }
  48.  
nofx Отправлено: 20 Апреля, 2011 - 16:39:45 • Тема: Помогите отобразить результаты SQL запроса в виде 3-уровневого списка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 868
Знаю, но такие методы построения основываются на $id - идентификаторе раздела и $pid - идентификаторе родительского раздела, а таких полей в моей БД просто нету

Пробую это сделать по такой придуманной схеме:

1)делаю запрос по школам c группировкой (GROUP BY) и формирую массив $one[], который содержит отобранные школы (это будет 1-ый уровень)

2)делаю запрос по школьникам ,из него формирую двумерный массив $two[]

То есть массив в массиве:
$two = array("id_school" => array ( "name"=> имя школьника));

3) как-то отобразить массивы в циклах, типа такого:
PHP:
скопировать код в буфер обмена
  1.     for(....){
  2.         echo $one[i];
  3.             for(...){
  4.                 echo $two[i][name];
  5. }}


Вот.....По пункту 2 никак не могу правильно заполнить двумерный массив $two значениями из результата SQL запроса чтобы он был такого вида:

PHP:
скопировать код в буфер обмена
  1. $two = array ("1" => array ("name" => ivan1), "2" => array ("name" => ivan2),...);
nofx Отправлено: 20 Апреля, 2011 - 01:03:13 • Тема: Помогите отобразить результаты SQL запроса в виде 3-уровневого списка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 868
Итак, есть моя MySQL база:

-школьники-
CODE (SQL):
скопировать код в буфер обмена
  1. TABLE schkolnik (
  2.   id_schkolnik int(11),
  3.   name varchar(40) ,
  4.   id_school int(11) ,
  5.   id_rukovod int(11) ,
  6.   PRIMARY KEY ( id_schkolnik )
  7. );


-их наставники-
CODE (SQL):
скопировать код в буфер обмена
  1.  TABLE rukovod (
  2.  id_rukovod int(11),
  3.  name varchar(10),
  4. PRIMARY KEY (id_rukovod)
  5. );


-заказы (школьников на новости Радость )-
CODE (SQL):
скопировать код в буфер обмена
  1. TABLE orders (
  2.   id_order  int(11) ,
  3.   id_schkolnik int(11),
  4.   id_news int(11),
  5.   PRIMARY KEY (`id_order`)
  6. );


-новости-
CODE (SQL):
скопировать код в буфер обмена
  1. TABLE news (
  2.   id_news int(11),
  3.   adress text ,
  4.   PRIMARY KEY (`id_news`)
  5. );


Есть запрос (выводит подписчиков на новость № 5 )
$query =
CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT *
  2. FROM schkolnik
  3. WHERE id_schkolnik
  4. IN (
  5.  
  6. SELECT id_schkolnik
  7. FROM orders
  8. WHERE id_news =5
  9. ORDER BY id_rukovod ASC
  10. )
  11. ORDER BY id_school ASC"
  12.  


Выводит этот запрос типа такого:
Цитата:
----------------------------------------------------------------------------
id_schkolnik--------name-------- ------id_school-------------id_r ukovod
1---------------------ivan1--------------1--------------------------1
2---------------------ivan2----- ---------1---------------------- ----1
3 --------------------ivan3------- -------1------------------------ --2
4---------------------ivan4--------------2--------------------------3
5---------------------ivan5----- ---------2---------------------- ----3
--------------------------------------------------------------------------------------


Возможно ли обработать этот запрос скриптом - php для его отображения в таком виде (в виде трехуровневого списка)???:


id_shool 1
--id_rukovod 1
------id_schkolnik 1
------id_schkolnik 2
--id_rukovod 2
------id_schkolnik 3
id_shool 2
--id_rukovod 3
------id_schkolnik 4
------id_schkolnik 5

Нужно формировать дерево из возвращаемого запросом массива? Не могу ничего придумать ...
nofx Отправлено: 18 Апреля, 2011 - 19:20:16 • Тема: помощь по запросу на выборку с двумя противоположными условиями "Where" • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 23
EuGen пишет:
http://dev.mysql.com/doc/refman/5.0/en/union.html


Да, спасибо, буду знать!
Спасибо поставить не могу, поэтому кидаю WM )
nofx Отправлено: 18 Апреля, 2011 - 14:42:26 • Тема: помощь по запросу на выборку с двумя противоположными условиями "Where" • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 23
Помогите правильно составить запрос. Сначала база данных:

Экскурсии:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE news
  2. (
  3.   id_news int(11) ,
  4.   date text ,
  5.   PRIMARY KEY (id_news)
  6. )


Заказы на экскурсии:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE orders (
  2.   id_order int(11) ,
  3.   id_schkolnik int(11) ,
  4.   id_news int(11) ,
  5.   PRIMARY KEY (id_order)
  6. )


Ну и сами участники ( заказывают сами себе экскурсии - в таблице orders появляются записи с соответсвующими id_shkolnik и id_news):
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE schkolnik (
  2.   id_schkolnik int(11) ,
  3.   name varchar(40),
  4.   PRIMARY KEY (id_schkolnik)
  5. )


Нужен запрос, выводящий все экскурсии на которые подписан данный школьник ( php будет выводить галочку в соответсвующей графе) и на которые он не подписан:

есть два SQL запроса - 1-ый выводит те, на которые он подписан:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM news WHERE id_news IN (SELECT id_news FROM orders WHERE id_schkolnik = '$user_id')


2-ой - на которые он не подписан:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM news WHERE id_news NOT IN (SELECT id_news FROM orders WHERE id_schkolnik = '$user_id')


Вот как мне их объединить правильно? Оператором AND?
Вот так ошибка:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM news WHERE id_news IN (SELECT id_news FROM orders WHERE id_schkolnik = '$user_id') AND WHERE id_news NOT IN (SELECT id_news FROM orders WHERE id_schkolnik = '$user_id')
nofx Отправлено: 03 Апреля, 2011 - 23:17:37 • Тема: Помощь по директиве RewriteRule • Форум: Программирование на PHP

Ответов: 2
Просмотров: 186
Саныч пишет:
думаю так будет правильней
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteEngine on
  2.  
  3. RewriteRule ^article_([0-9]+)\.html$ view.php?news_id=$1

накой вы поставили это ([/]?) Не понял
з.ы. про точку не уверен, нужно ли ее экранировать в данном случае, но на всякий случай


С ModRewrite еще на работал, спасибо. Просто скачал скрипт для публикации 2005 года (http://www.woweb.ru/load/98-1-0-4032), вот его и приходится дорабатывать.
nofx Отправлено: 03 Апреля, 2011 - 22:25:55 • Тема: Помощь по директиве RewriteRule • Форум: Программирование на PHP

Ответов: 2
Просмотров: 186
Правильно ли написана директива для перенаправления с article_число.html на view.php?news_id=число

файл .htaccess
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine on
  3.  
  4. RewriteRule ^article_([0-9]+)([/]?).html$ view.php?news_id=$1
  5.  


Ведь будет ли виден $_GET['news_id']=чиcло в view.php

Страниц (2): « 1 [2]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB