Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помощь в преобразовании строки json (https://javascript.ru/forum/jquery/56057-pomoshh-v-preobrazovanii-stroki-json.html)

dimke931 27.05.2015 20:13

Помощь в преобразовании строки json
 
Всем добрый день, уже неделю не могу составить правильно скрипт, который преобразует json строку.
Вот исходная строка
Код:

[{"id":"1","name":"Киевский","surname":"Дмитрий","id_fat":"3","id_mot":"2"},
{"id":"2","name":"Ращупкина","surname":"Елизавета","id_fat":"7","id_mot":"0"},
{"id":"3","name":"Киевский","surname":"Владимир","id_fat":"6","id_mot":"5"},
{"id":"5","name":"","surname":"Галина","id_fat":"0","id_mot":"0"},
{"id":"6","name":"Киевский","surname":"Дмитрий","id_fat":"0","id_mot":"0"},
{"id":"7","name":"Ращупкин","surname":"Виталий","id_fat":"0","id_mot":"0"}];

Вот такую строку надо получить:
Код:

{
    "name": "Киевский Дмитрий",
    "parent": [{
        "name": "Киевский Владимир",
        "parent": [{
                "name": "Киевский Дмитрий "
            }, {
                "name": "Галина"
            }]
    },{
        "name": "Ращупкина Елизавета",
        "parent": [{
                "name": "Ращупкин Виталий"
            }]
        }]
}

В исходной строке id это итендификатор пользователя а id_fat и id_moth это итендификаторы отца и матери. Думаю, что нужно как то через рекурсию сделать, но я не силен в программировании... Буду рад любой помощи ^_^

dimke931 27.05.2015 20:43

Написал код, но он не так как надо работает...

$(document).ready(function(){
 var foo =[{"id":"1","name":"Киевский","surname":"Дмитрий","id_fat":"3","id_mot":"2"},{"id":"2","name":"Ращупкина","surname":"Елизавета","id_fat":"7","id_mot":"0"},{"id":"3","name":"Киевский","surname":"Владимир","id_fat":"6","id_mot":"5"},{"id":"4","name":"Третьяков","surname":"Антон","id_fat":"3","id_mot":"2"},{"id":"5","name":"","surname":"Галина","id_fat":"0","id_mot":"0"},{"id":"6","name":"Киевский","surname":"Дмитрий","id_fat":"0","id_mot":"0"},{"id":"7","name":"Ращупкин","surname":"Виталий","id_fat":"0","id_mot":"0"}];

 //console.log(foo[0].nom)
string = ""
	 for(i=0;i<foo.length;i++){
	 namef = '';
	 namem = '';
		 if(foo[i].id_fat != 0 || foo[i].id_mot != 0){
			 idf = foo[i].id_fat;
			 idm = foo[i].id_mot;
			 for(j=0;j<foo.length;j++){
				 if(foo[j].id == idf){
					namef = foo[j].name+' '+foo[j].surname
				 }
				 if(foo[j].id == idm){
					namem = foo[j].name+' '+foo[j].surname
					console.log(namem)
				 }
			 }
			 console.log(foo[i].id+' '+foo[i].name+' '+foo[i].surname+' '+namef+' '+namem)
			 string = string + '{"name":"'+foo[i].name+' '+foo[i].surname+'","children": [{"name": "'+namef+'"}, {"name": "'+namem+'"}],}'
		 }
	 }
console.log(string)
})

рони 27.05.2015 21:33

вам такой результат нужен?
[{
     "name": "Киевский Дмитрий",
     "parent": [{
         "name": "Киевский Владимир"
     }, {
         "name": "Ращупкина Елизавета"
     }]
 }, {
     "name": "Ращупкина Елизавета",
     "parent": [{
         "name": "Ращупкин Виталий"
     }]
 }, {
     "name": "Киевский Владимир",
     "parent": [{
         "name": "Киевский Дмитрий"
     }, {
         "name": " Галина"
     }]
 }, {
     "name": "Третьяков Антон",
     "parent": [{
         "name": "Киевский Владимир"
     }, {
         "name": "Ращупкина Елизавета"
     }]
 }, {
     "name": " Галина",
     "parent": []
 }, {
     "name": "Киевский Дмитрий",
     "parent": []
 }, {
     "name": "Ращупкин Виталий",
     "parent": []
 }]

dimke931 28.05.2015 06:59

Нет, тут нужно родителей запихать внутрь.
{
    "name": "Киевский Дмитрий",
    "parent": [{
        "name": "Киевский Владимир",
        "parent": [{
                "name": "Киевский Дмитрий "
            }, {
                "name": "Галина"
            }]
    },{
	 "name": "Ращупкина Елизавета",
	 "parent": [{
                "name": "Ращупкин Виталий"
            }]
	}]
}

вот так... просто исходную строку я плучаю с помощью пхп скрипта, а преобразую ее в js.

laimas 28.05.2015 08:27

Цитата:

Сообщение от dimke931
просто исходную строку я плучаю с помощью пхп скрипта, а преобразую ее в js.

РНР отдал JSON, а "преобразую ее в js", это что такое? В JS ее используют как объект после JSON.parse(плучаю с помощью пхп). А уж если js-объект вернуть серверу и тоже как JSON, то JSON.stringify(js-объект).

рони 28.05.2015 09:50

dimke931,
то есть вам нужно построить дерево :)

dimke931 28.05.2015 11:19

Цитата:

Сообщение от рони (Сообщение 372814)
dimke931,
то есть вам нужно построить дерево :)

Грубо говоря да:)

dimke931 28.05.2015 11:20

Цитата:

Сообщение от laimas (Сообщение 372808)
РНР отдал JSON, а "преобразую ее в js", это что такое? В JS ее используют как объект после JSON.parse(плучаю с помощью пхп). А уж если js-объект вернуть серверу и тоже как JSON, то JSON.stringify(js-объект).

Мне не нужно отдавать серверу полученную json строку, она нужна для того, что бы по ней отрисовать дерево

laimas 28.05.2015 12:02

Цитата:

Сообщение от dimke931
Мне не нужно отдавать серверу полученную json строку, она нужна для того, что бы по ней отрисовать дерево

Я это понял после то есть вам нужно построить дерево, но с чего это вдруг дерево этого массива будет таким как вы ожидаете? Оно будет близким к тому как рони показал, и его можно сразу и вернуть сервером, а для того чтобы отображалось деревом, поместить JSON строку в тег PRE, или иной выводящий как есть:
echo '<pre>';
$s = json_decode('[{"id":"1","name":"Киевский","surname":"Дмитрий","id_fat":"3","id_mot":"2"},
{"id":"2","name":"Ращупкина","surname":"Елизавета","id_fat":"7","id_mot":"0"},
{"id":"3","name":"Киевский","surname":"Владимир","id_fat":"6","id_mot":"5"},
{"id":"5","name":"","surname":"Галина","id_fat":"0","id_mot":"0"},
{"id":"6","name":"Киевский","surname":"Дмитрий","id_fat":"0","id_mot":"0"},
{"id":"7","name":"Ращупкин","surname":"Виталий","id_fat":"0","id_mot":"0"}]', 1);

echo json_encode($s, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);

Параметр JSON_PRETTY_PRINT как раз и вернет форматируемый как есть.

dimke931 28.05.2015 12:16

Цитата:

Сообщение от laimas
1
echo '<pre>';
2
$s = json_decode('[{"id":"1","name":"Киевский","surname":"Д итрий","id_fat":"3","id_mot":"2"},
3
{"id":"2","name":"Ращупкина","surname":" лизавета","id_fat":"7","id_mot":"0"},
4
{"id":"3","name":"Киевский","surname":"В адимир","id_fat":"6","id_mot":"5"},
5
{"id":"5","name":"","surname":"Галина","id_f at":"0","id_mot":"0"},
6
{"id":"6","name":"Киевский","surname":"Д итрий","id_fat":"0","id_mot":"0"},
7
{"id":"7","name":"Ращупкин","surname":"В талий","id_fat":"0","id_mot":"0"}]', 1);
8
 
9
echo json_encode($s, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_NUMERIC_CHECK);

у меня это все есть, скрипт принимает на себя json строку, я не знаю как написать рекурсивную (как мне кажется) функцию что бы преобразовать эту строку в нужную

laimas 28.05.2015 12:22

Какая рекурсия, если:
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Киевский
            [surname] => Дмитрий
            [id_fat] => 3
            [id_mot] => 2
        )

    [1] => Array
        (
            [id] => 2
            [name] => Ращупкина
            [surname] => Елизавета
            [id_fat] => 7
            [id_mot] => 0
        )

С чего вдруг:
"name": "Киевский Дмитрий",
    "parent": [{
        "name": "Киевский Владимир",
        "parent": [{

"parent", которого нет в исходном? И не проще ли организовать на сервере из исходного массива средствами РНР массив такой структуры, в котором все будет так как вам нужно, и только потом json_encode? И для этого вряд ли рекурсия потребуется.

dimke931 28.05.2015 12:32

Цитата:

Сообщение от laimas (Сообщение 372850)
Какая рекурсия, если:
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Киевский
            [surname] => Дмитрий
            [id_fat] => 3
            [id_mot] => 2
        )

    [1] => Array
        (
            [id] => 2
            [name] => Ращупкина
            [surname] => Елизавета
            [id_fat] => 7
            [id_mot] => 0
        )

С чего вдруг:
"name": "Киевский Дмитрий",
    "parent": [{
        "name": "Киевский Владимир",
        "parent": [{

"parent", которого нет в исходном? И не проще ли организовать на сервере из исходного массива средствами РНР массив такой структуры, в котором все будет так как вам нужно, и только потом json_encode? И для этого вряд ли рекурсия потребуется.

хм... я об этом не подумал... а про рекурсию я подумал когда начал рисовать на листочке структуру строки и понял то внутри каждой конструкции имя + родитель есть 2 конструкции имя + родитель) и я думал попробовать найти сколько будет таких уровней конструкции и заполнить ее :)
Но средствами PHP я еще не думал как реализовать, т.к. если в js я еще что то могу попробовать реализовать то с PHP я без понятия:)

dimke931 28.05.2015 12:34

<?php
///////////////////////
// декодируем русские символы
function jdecoder($json_str) {
  $cyr_chars = array (
    '\u0430' => 'а', '\u0410' => 'А',
    '\u0431' => 'б', '\u0411' => 'Б',
    '\u0432' => 'в', '\u0412' => 'В',
    '\u0433' => 'г', '\u0413' => 'Г',
    '\u0434' => 'д', '\u0414' => 'Д',
    '\u0435' => 'е', '\u0415' => 'Е',
    '\u0451' => 'ё', '\u0401' => 'Ё',
    '\u0436' => 'ж', '\u0416' => 'Ж',
    '\u0437' => 'з', '\u0417' => 'З',
    '\u0438' => 'и', '\u0418' => 'И',
    '\u0439' => 'й', '\u0419' => 'Й',
    '\u043a' => 'к', '\u041a' => 'К',
    '\u043b' => 'л', '\u041b' => 'Л',
    '\u043c' => 'м', '\u041c' => 'М',
    '\u043d' => 'н', '\u041d' => 'Н',
    '\u043e' => 'о', '\u041e' => 'О',
    '\u043f' => 'п', '\u041f' => 'П',
    '\u0440' => 'р', '\u0420' => 'Р',
    '\u0441' => 'с', '\u0421' => 'С',
    '\u0442' => 'т', '\u0422' => 'Т',
    '\u0443' => 'у', '\u0423' => 'У',
    '\u0444' => 'ф', '\u0424' => 'Ф',
    '\u0445' => 'х', '\u0425' => 'Х',
    '\u0446' => 'ц', '\u0426' => 'Ц',
    '\u0447' => 'ч', '\u0427' => 'Ч',
    '\u0448' => 'ш', '\u0428' => 'Ш',
    '\u0449' => 'щ', '\u0429' => 'Щ',
    '\u044a' => 'ъ', '\u042a' => 'Ъ',
    '\u044b' => 'ы', '\u042b' => 'Ы',
    '\u044c' => 'ь', '\u042c' => 'Ь',
    '\u044d' => 'э', '\u042d' => 'Э',
    '\u044e' => 'ю', '\u042e' => 'Ю',
    '\u044f' => 'я', '\u042f' => 'Я',
 
    '\r' => '',
    '\n' => '<br />',
    '\t' => ''
  );
 
  foreach ($cyr_chars as $key => $value) {
    $json_str = str_replace($key, $value, $json_str);
  }
  return $json_str;
}
////////////////////////
$data = array(); // в этот массив запишем то, что выберем из базы

$ta = mysql_query("select id_indi as id, nom as name, prenom1 as surname, ifnull(id_pere,0) as id_fat, ifnull(id_mere,0) as id_mot from got_".$_REQUEST['ibase']."_individu "); // сделаем запрос в БД
while($row = mysql_fetch_assoc($ta)){ // оформим каждую строку результата
                                      // как ассоциативный массив
    $data[] = $row; // допишем строку из выборки как новый элемент результирующего массива
}
echo jdecoder(json_encode($data)); // и отдаём как json
?>


в данный момент я получаю свою json строку так

laimas 28.05.2015 12:37

Что значит без понятия? Вот я например не могу понять (и это никоим образом ни к какому языку программирования не относится, это чисто логический вывод) - как такое может быть?: "name": "Киевский Дмитрий", этот же "Киевский Дмитрий" является для "Киевского Дмитрия" родителем: "parent": [{"name": "Киевский Дмитрий"...

Это как понимать? Это не дерево фамильное, это жертвы Чернобыльской трагедии. :)

laimas 28.05.2015 12:39

jdecoder(json_encode($data)) - а что за версия РНР используется? Может пора перелазить как минимум на 5.4 и jdecoder() в помойку?

dimke931 28.05.2015 12:42

Ох, я и забыл про это тут весь прикол что это два разных Дмитрия Киевских (внук и дед) (простите за то что не объяснил сразу)... а вот про версию php... такая стоит изначально на денвере... хотя это может быть повод перелезть на опен сервер

dimke931 28.05.2015 12:45

версия php 5.3.13

laimas 28.05.2015 12:47

Давно пора перелезть на Open Server и подключать в нем ту версию, которая будет на реальном сервере. Денвер давно помер.

Что касается вывода из базы и построения дерева, и при этом есть дед с внуком, и дед в базе как "родитель" внука, то запрос не верный. Если его сделать правильно, как и выбирается дерево, и можно без всяких рекурсий, то потом можно из результата построить дерево, но оно никак не будет таким, это неверное представление. А уж потом jsoan_encode().

laimas 28.05.2015 12:48

Цитата:

Сообщение от dimke931
версия php 5.3.13

Это уже антиквариат :)

dimke931 28.05.2015 12:50



вот графическое изображение этого самого дерева

dimke931 28.05.2015 12:51

А мне вот интересно, т.к. этот проект 2014 года и я подрублю все это на свежую версию php не будет ли ошибок?)

laimas 28.05.2015 12:52

То есть вершина дерева это потомок? И как оно в базе описывается? Какова максимальная глубина вложения может быть?

dimke931 28.05.2015 12:53

Цитата:

Сообщение от dimke931 (Сообщение 372858)
Ох, я и забыл про это тут весь прикол что это два разных Дмитрия Киевских (внук и дед) (простите за то что не объяснил сразу)... а вот про версию php... такая стоит изначально на денвере... хотя это может быть повод перелезть на опен сервер

Нет в базе что бы попасть от внука к деду нужно пройти цепочку через отца...

в базу данных каждая персона имеет ссылку на id отца и матери

laimas 28.05.2015 12:54

Цитата:

Сообщение от dimke931
А мне вот интересно, т.к. этот проект 2014 года и я подрублю все это на свежую версию php не будет ли ошибок?

Вряд ли что-то будет серьезное, если только мелочи, которые легко будет подправить. Все зависит от того что использует код, если нет ООП, то и вряд ли проблемы будут.

dimke931 28.05.2015 12:58

В MySQL это описывается так...

изначально это была французская разработка, но я решил ее допилить и познать web как бы на примерах. то есть тут есть id_indi как id персоны и id_pere как id отца и id_mere как id матери

на 4 id пока не обращайте внимание, он пока тут не фигурирует) я хочу потом сделать так, что бы если ид родителей одинаковые то записывать их в одну ячейку

laimas 28.05.2015 12:59

Цитата:

Сообщение от dimke931
Нет в базе что бы попасть от внука к деду нужно пройти цепочку через отца...
в базу данных каждая персона имеет ссылку на id отца и матери

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

В общем нужно видеть представление базы, ее структуру, но запрос делается не верно, это 100% точно.

dimke931 28.05.2015 13:01

Цитата:

Сообщение от laimas (Сообщение 372869)
Если нужно выводить древо от потомков к предкам (я правильно картинку понял?), то связь такой и должна быть - потомок родитель, все ему подчиненные, это потомки.

В общем нужно видеть представление базы, ее структуру, но запрос делается не верно, это 100% точно.

Может я и запрос не правильно сделал, т.к. я просто взял все:) возможно можно сделать нужную строку одним запросом)

laimas 28.05.2015 13:02

Картинки не дают никакого представления о структуре базы - как связываются между собой родитель <-> потомок и потомок <-> родитель.

dimke931 28.05.2015 13:03

Цитата:

Сообщение от laimas (Сообщение 372871)
Картинки не дают никакого представления о структуре базы - как связываются между собой родитель <-> потомок и потомок <-> родитель.

а что нужно предоставить?)

dimke931 28.05.2015 13:08

Цитата:

Сообщение от laimas (Сообщение 372871)
Картинки не дают никакого представления о структуре базы - как связываются между собой родитель <-> потомок и потомок <-> родитель.




сами связи дополнительно хранятся отдельно :)

laimas 28.05.2015 13:09

Цитата:

Сообщение от dimke931
а что нужно предоставить?)

Ну вообще-то дамп таблицы данных, чтобы видеть структуру и связи. Но эта тема (да и вообще весть пост данный) к JS отношения не имеет, ну только, если на уровне "щелкнуть и показать", не более.

laimas 28.05.2015 13:10

Цитата:

Сообщение от dimke931
сами связи дополнительно хранятся отдельно

Почему отдельно?

dimke931 28.05.2015 13:29

Цитата:

Сообщение от laimas (Сообщение 372876)
Почему отдельно?

Вот честно, я не знаю... Это не моя структура данных... как я изначально и писал это французская разработка, но ее забросили в 2014 году и я решил ее дописать, как то поиграться с ней, но было куча вопросов, которые приходится разбирать, получалось вроде самому до сего момента :) а про то что отдельно, я читал статью о хранении сложных структур данных в реляционных бд и там советовали отдельно хранить связи (метод М-арного дерева)

dimke931 28.05.2015 13:37

CREATE TABLE `got_kievsky_even_sour` (
  `id_indi` mediumint(9) NOT NULL DEFAULT '0',
  `id_husb` mediumint(9) NOT NULL DEFAULT '0',
  `id_wife` mediumint(9) NOT NULL DEFAULT '0',
  `type_evene` varchar(4) NOT NULL,
  `date_evene` varchar(32) DEFAULT NULL,
  `lieu_evene` varchar(42) DEFAULT NULL,
  `dept_evene` varchar(42) DEFAULT NULL,
  `id_sour` mediumint(9) NOT NULL DEFAULT '0',
  `type_sourc` varchar(4) NOT NULL,
  `attr_sourc` varchar(255) DEFAULT NULL,
  KEY `FK1_INDI` (`id_indi`,`type_evene`),
  KEY `FK2_HUSB` (`id_husb`,`type_evene`),
  KEY `FK3_WIFE` (`id_wife`,`type_evene`),
  KEY `FK4_SOUR` (`id_sour`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8	;
#	TC`got_kievsky_evenement`utf8_general_ci	;
CREATE TABLE `got_kievsky_evenement` (
  `id_indi` mediumint(9) NOT NULL DEFAULT '0',
  `id_husb` mediumint(9) NOT NULL DEFAULT '0',
  `id_wife` mediumint(9) NOT NULL DEFAULT '0',
  `type_evene` varchar(4) NOT NULL,
  `date_evene` varchar(32) DEFAULT NULL,
  `lieu_evene` varchar(42) DEFAULT NULL,
  `dept_evene` varchar(42) DEFAULT NULL,
  `note_evene` mediumtext,
  `anne_evene` smallint(6) DEFAULT NULL,
  KEY `FK1_INDI` (`id_indi`),
  KEY `FK2_HUSB` (`id_husb`),
  KEY `FK3_WIFE` (`id_wife`),
  KEY `FK4_LIEU` (`lieu_evene`),
  KEY `FK5_TYPE` (`type_evene`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8	;
#	TC`got_kievsky_individu`utf8_general_ci	;
CREATE TABLE `got_kievsky_individu` (
  `id_indi` int(9) NOT NULL DEFAULT '0',
  `nom` varchar(32) DEFAULT NULL,
  `prenom1` varchar(32) DEFAULT NULL,
  `prenom2` varchar(32) DEFAULT NULL,
  `prenom3` varchar(32) DEFAULT NULL,
  `sexe` tinytext,
  `profession` varchar(42) DEFAULT NULL,
  `date_naiss` varchar(32) DEFAULT NULL,
  `lieu_naiss` varchar(42) DEFAULT NULL,
  `dept_naiss` varchar(42) DEFAULT NULL,
  `date_deces` varchar(32) DEFAULT NULL,
  `lieu_deces` varchar(42) DEFAULT NULL,
  `dept_deces` varchar(42) DEFAULT NULL,
  `note_indi` text,
  `id_pere` mediumint(9) DEFAULT NULL,
  `id_mere` mediumint(9) DEFAULT NULL,
  `tri` smallint(6) DEFAULT NULL,
  `sosa_dyn` bigint(20) DEFAULT NULL,
  `anne_deces` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`id_indi`),
  KEY `FK1_NOM` (`nom`),
  KEY `FK2_PREN` (`prenom1`),
  KEY `FK3_PERE` (`id_pere`),
  KEY `FK4_MERE` (`id_mere`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8	;
#	TC`got_kievsky_relation`utf8_general_ci	;
CREATE TABLE `got_kievsky_relation` (
  `id_parent` mediumint(9) NOT NULL DEFAULT '0',
  `id_enfant` mediumint(9) NOT NULL DEFAULT '0',
  `type_parent` char(1) DEFAULT NULL,
  PRIMARY KEY (`id_parent`,`id_enfant`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8	;
#	TC`got_kievsky_source`utf8_general_ci	;
CREATE TABLE `got_kievsky_source` (
  `id_sour` mediumint(9) NOT NULL DEFAULT '0',
  `note_source` mediumtext,
  PRIMARY KEY (`id_sour`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8	;


вот я сделал дамп таблиц

dimke931 28.05.2015 13:40

Я только не как не могу понять, почему мне не выдает связей... ведь они должны быть...

laimas 28.05.2015 13:44

Код:

CREATE TABLE `got_kievsky_relation` (
  `id_parent` mediumint(9) NOT NULL DEFAULT '0',
  `id_enfant` mediumint(9) NOT NULL DEFAULT '0',
  `type_parent` char(1) DEFAULT NULL,
  PRIMARY KEY (`id_parent`,`id_enfant`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Это и есть таблица связывающая потомков с предками? А какова максимальная глубина вложения, или она не ограничивается?

dimke931 28.05.2015 13:46

Цитата:

Сообщение от laimas (Сообщение 372890)
Код:

CREATE TABLE `got_kievsky_relation` (
  `id_parent` mediumint(9) NOT NULL DEFAULT '0',
  `id_enfant` mediumint(9) NOT NULL DEFAULT '0',
  `type_parent` char(1) DEFAULT NULL,
  PRIMARY KEY (`id_parent`,`id_enfant`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Это и есть таблица связывающая потомков с предками? А какова максимальная глубина вложения, или она не ограничивается?

не ограниивается

laimas 28.05.2015 13:46

Цитата:

Сообщение от dimke931
Я только не как не могу понять, почему мне не выдает связей... ведь они должны быть...

А где в этом запросе вообще есть упоминание о каких либо связях?:

"select id_indi as id, nom as name, prenom1 as surname, ifnull(id_pere,0) as id_fat, ifnull(id_mere,0) as id_mot from got_".$_REQUEST['ibase']."_individu "

dimke931 28.05.2015 13:49

Цитата:

Сообщение от laimas (Сообщение 372893)
А где в этом запросе вообще есть упоминание о каких либо связях?:

"select id_indi as id, nom as name, prenom1 as surname, ifnull(id_pere,0) as id_fat, ifnull(id_mere,0) as id_mot from got_".$_REQUEST['ibase']."_individu "

хм... нигде... просто я когда изучал sql в университете мы делали в erwin концептуальную модель и генерировали скрипт, который содержал в себе связи... а тут мне не дали связи вот я и растерялся

laimas 28.05.2015 14:02

мы делали в erwin концептуальную модель - а не шаляй валяй. ) Ну а запрос ваш, это же просто запрос к одной таблице для получения указанных полей и все, без всякой концепции, то бишь углубленной задачи.

Совет, хотя можете его и не воспринимать - не пишите в запросах имена полей и названия функций в одном регистре, плохо читается такой запрос. Лучше так:
$sql = 'SELECT id_indi AS id, nom name, prenom1 surname, ifnull(id_pere,0) id_fat, ifnull(id_mere,0) id_mot FROM got_'.$_REQUEST['ibase'].'_individu';

AS указан только раз, ибо уж не помню с какой версии его можно опускать.

А вот это - got_' . $_REQUEST['ibase'] . '_individu - не допустимо.

Нет времени сейчас, а выбор из таблицы дерева, это извечный вопрос, и о нем уже столько переписано. Есть такой подход: NESTED SETS есть и иные. Могу добавить, по секрету, что можно вообще сформировать строку запроса, выполнить один запрос и получить дерево, и тоже без рекурсий. Только одно условие для этого нужно - ограничение максимального вложения какой либо величиной.


Часовой пояс GMT +3, время: 06:59.