Как вывести две связанных таблицы. (( фирма (1,2,3) - список сотрудников))?

kumich

Новичок
Попробуй реализовать это и покажи что получилось.
Вот примерно мои размышления, как и в предыдущем случае, чтобы отследить, в каких местах я ошибаюсь.

Так как,

будет состоять из 2 значений нужных тебе.
подобный значений у нас нет, их нужно достать. Вычитал в книжке, что делать это надо функцией экстракт.

extract($row);

получается, что из row достаются отдельные значения $firm1 и $firm2.

После этого, мы получаем целую формулу.

while ($row_2 = mysql_fetch_array($result_2))
{

extract($row_2); //здесь мы получаем отдельные переменные, а не row

// ну и в своей формуле образуем новый массив, в который входят отдельные значения $firm1 и $firm2 вместо массива row_2['']

$firms[$row_2['year']][] = array($firm1, $firm2);

а теперь нужно залезть в первый и третий массив и достать следующий значения в первом - массиве - ключи, а в третьем массиве - объекты массива.

foreach ($firms as $obj_key => $obj)
foreach ($obj as $key => $value)
foreach ($value as $key1 => $value1)

из $obj_key делаем шапку, а из

value1 - делаем тело таблицы.

Окончание хода мысли.
-----------------------------------------
-----------------------------------------

Кроме того, возник вопрос следующего порядка, с которым с столкнусь в конце этого нелегкого дела.. Если в самом первом примере, путем объединения таблиц мы могли выбрать из столбика юзерс(фирм) - имена вместо id то сейчас мы таблицу где находились имена фирм не объединяли. Не объядинял я потому что не знал как. В первом случае столбик id был один вот по нему мы и соединили таблицы. Теперь же получается, что таких столбиков два. В одной книжке я нашел информацию. что нужно писать функцию по преобразованию ид в название. Но можно ли это дело как-то обойти и через какой-нибудь оператор AND показать, что столбик id фирмы с таблицы фирмы совпадает с ДВУМЯ столбиками id с колонок firm1 и firm2
 

Bitterman

Новичок
В целом, верно, но:
подобный значений у нас нет, их нужно достать. Вычитал в книжке, что делать это надо функцией экстракт.
extract($row);
получается, что из row достаются отдельные значения $firm1 и $firm2.
Зачем? Чтобы достать значение года тебе никакие extract были не нужны, а тут вдруг понадобились?
foreach ($firms as $obj_key => $obj)
foreach ($obj as $key => $value)
foreach ($value as $key1 => $value1)
Это верно в общем случае, когда ты не знаешь количество элементов последнего уровня (количество колонок в строке) или оно достаточно велико. В нашем случае, вместо последнего цикла можно просто написать $value[0], $value[1].
 

kumich

Новичок
Зачем? Чтобы достать значение года тебе никакие extract были не нужны, а тут вдруг понадобились?
Достали помарки :) В той форуле мне выдало ошибку - неуместное использование "]". Я вроде поглядел, вроде все правильно. Подумал, что в таком случае нельзя так представлять информацию. Начал читать литературу, и нашел такой вот экстракт. После этого, извлек отдельные переменные и вуаля - заработало. Теперь вот. зная, что не надо никакого экстракта - переделал и работает :)

Жалко, никто помочь не может в таких ситуация, сказать - все верно, ищи ошибку в другом месте, не надо row преобразовывать.

В нашем случае, вместо последнего цикла можно просто написать $value[0], $value[1].
Спасибо огромное! Благодаря данной информации удалось между фирмами впихнуть еще и ячейку с (-) теперь выглядит гораздо лучше. А в задумке есть еще вывести пару столбцов непосредственно с финансовыми результатами данных фирм. :) Теперь благодаря этой формуле можно использовать ее для нескольких столбцов.

К сожалению, советы baev я не понял. То есть информация понятна, но как ее реализовать на практике и какой формулой заставить ряд (года) выводится только по одному разу я пока не знаю.

Кроме того, путем написания отдельной функции, удалось цифровые id преобразовать в названия фирм. В общем, этот день получился довольно таки результативным :)

Сейчас вот прикрутил к данному тексту выпадающий список фирм, выбирая который на странице отображаются результаты конкретно по данной фирме за несколько лет (в сравнении с другой фирмой в соответствующем ряде). Не получается одна штука. Если к выпдающему списку фирм (которые формируются через подачу запроса к таблицы фирмы велью - фирм_id) добавить пунктик велью "all" - то начинает страница сбоить. Все ли я правильно делаю в такой вот структуре страницы

Такая структура.

if есть переменная Пост

{ if переменная пост равна "all (в выпадающем списке Фирм - Все фирмы)" {рисуем полную таблицу}
else{рисуем таблицу для конкретно выбранной фирмы}

}

else

{рисуем начальную страницу}
 

Bitterman

Новичок
К сожалению, советы baev я не понял. То есть информация понятна, но как ее реализовать на практике и какой формулой заставить ряд (года) выводится только по одному разу я пока не знаю.
Да все в принципе просто. Для начала в запросе надо упорядочить данные по годам с помощью ORDER BY. Затем объявить переменную, допустим, $Year, которой перед циклом while присвоить значение 0. Затем, уже в цикле, сравнить значение $Year со значением $row['year']. Если они не равны, то вывести $row['year'] в виде заголовка, при этом присвоить $Year значение $row['year']. Ячейки таблицы выводить также, как и раньше, то есть
'<td>' . $row['value1'] . '</td><td>' . $row['value1'] . '</td>'

Все ли я правильно делаю в такой вот структуре страницы
По логике все вроде бы правильно. Ищи ошибку в другом месте.
http://phpfaq.ru/debug
 

kumich

Новичок
Bitterman
По логике все вроде бы правильно. Ищи ошибку в другом месте.
Нашел! Точнее не нашел. Переписал по новой тщательно и внимательно и ЗАРАБОТАЛО. А сегодня еще и года прикрутил. Получается, что можно выбирать что отобразить как по годам, так и по отдельным фирмам. Так и по всем фирмам за один год. В общем, несмотря на свое гуманитарное образование и то, что количество дней изучения пхп составляет аж количество постов на этом форуме, даже похвалил себя за проделанную работу. Огромное спасибо за нужные подсказки.


Bitterman

Подскажи, пожалуйста,

Я пытаюсь передать через переменную пост два массива значений firms1[] and firms2[], а вот слить их вместе не получается. Мне нужно по условию задачи


val[0] = (2)
val[1] = (1)
val[2] = (3)
val[3] = (2)

val[0] = (3)
val[1] = (4)
val[2] = (3)
val[3] = (1)

Нужно их объединить таким образом. чтобы значения 3 4 3 1 из второго массива дописались в строки первого массива. Я почитал литературу, там есть примеры объединения. но объединяются массивы таким путем

val[0]
val[1]
val[2]
val[3]
val[4]
val[5]
val[6]
val[7]

А мне нужно, именно дописать в конце каждой строчки еще одно значение из второго массива. Количество строчек и в первом и во втором массиве одинаково. Чувствую, что вопрос глупый, и ответ очень прост, но не получается у меня ничего.

-~{}~ 31.03.07 22:09:

Ну надо же сам разобрался :)
 
Сверху