PHP + EXCEL (нахождение данных)

Swat

Новичок
PHP + EXCEL (нахождение данных)

Здравствуйте! Столкнулся с такой пробемой: требуется из определенного диапазона значений например А1:D4 выбрать какую-то ячейку, удовлетворяющим условиям. Например, есть переменная со значением в ячейке С1 и переменная со значением в ячейке А3. На основе этих данных надо выбрать значение которое находится в их пересечениях, тоесть значение С3. Значений много... А вот как сделать такой поиск, что-то не соображаю... Подскажите пожалуйста технологию, заранее спасибо!

 

SiMM

Новичок
А какое отношение задача имеет к экселю? От экселя можно абстрагироваться, как, впрочем, и от PHP. И почему C3, а не A1?
 

findnext

Новичок
А вот как сделать такой поиск, что-то не соображаю
хранить данные не в excell а в базе данных, насколько я понял у тебя класическиий пример базы данных...который использовался в самом начале до того когда не существовало бд. Если все таки нужно сделать так как ты хочешь то необходимо знать теорию о базах данных. как она оперирует данными. На первом этапе данные всех ячеек перемножаются между собой, т.е. AxBXC и т.д....далее очень много рассказывать, почитай луче как работают бд. Оттуда и делай выводы
 

FractalizeR

Новичок
Автор оригинала: findnext
насколько я понял у тебя класическиий пример базы данных...который использовался в самом начале до того когда не существовало бд.
"класическиий пример базы данных...который использовался в самом начале до того когда не существовало бд."???

Автор оригинала: findnext
Если все таки нужно сделать так как ты хочешь то необходимо знать теорию о базах данных. как она оперирует данными. На первом этапе данные всех ячеек перемножаются между собой, т.е. AxBXC и т.д....далее очень много рассказывать, почитай луче как работают бд. Оттуда и делай выводы
Это вы о чем вообще?

2Swat
Непонятно, как это могут пересекаться между собой две ячейки? Вы имеете ввиду, что в двух ячейках лежат координаты третьей? Через какой компонент вы работаете с Excel? Что за задача перед вами стоит (если конкретнее говорить)?
 

findnext

Новичок
FractalizeR
это то как работает любая база данных
http://en.wikipedia.org/wiki/Relational_model

-~{}~ 17.12.08 16:17:

почему, например, если ты хочешь выбрать только одно поле ты делаешь SELECT pole вместо *? хотя через * можно получить все значения выборки? а всё потому что данные в реляционых базах данных хранятся в виде таблиц

-~{}~ 17.12.08 16:21:

SELECT pole, pole2 будет еквивалентно AxB, SELECT * будет еквивалентно AxBxCxD...пока существуют данные в таблицах -> от этого как раз и зависит время выборки из таблиц. Я много раз видел, хотя бы здесь на форуме, что люди говорят использовать SELECT pole вместо * так как выборка будет осуществляться быстрее но не объясняют почему

-~{}~ 17.12.08 16:27:

1. Данные в реляционных бд храняться в виде таблиц
2. При выборке данных колонки перемножаются между собой в зависимости от условий выборки.

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

-~{}~ 17.12.08 16:29:

самый легкий вариант - импорт в бд и с использованием sql вытаскивать то что нужно, разумеется при условии, что это не какое либо тестовое задание для php
 

FractalizeR

Новичок
findnext, прежде, чем что-то утверждать, вы бы озаботились вникнуть в суть предмета.

SELECT pole, pole2 - это выборка данных из одной таблицы. Никакого декартового произведения ("перемножения" по-вашему) там нет. Данные выбираются линейно. Вот если бы было SELECT tbl1.pole, tbl2.pole2 - это другое дело. результатом будет действительно декартово произведение таблиц (INNER JOIN) (кстати, это "произведение" только так называется. На самом деле ничего не перемножается. Не нужно путать матрицы с базами данных).

Кстати, я вас просвещу. SELECT pole выполняется быстрее SELECT * потому, что в результирующем наборе данных в первом случае оказывается только одно поле. А во втором - все поля таблицы. Правда ведь одно поле можно прочитать быстрее, чем все поля?
 

findnext

Новичок
FractalizeR
Правда ведь одно поле можно прочитать быстрее, чем все поля
а я иначе сказал?

не имеет значение одна это таблица или несколько

-~{}~ 17.12.08 16:55:

таблица 1 = tbl1
таблица 2 = tbl2
1) R(tblq.A X tbl1.B X .. tbl1.N)
2) R(tbl1.A x tbl1.B X .. tbl1.N X tbl2.A x tbl2.B .. tbl2.N)'
по моему есть различия.
Если бы ему нужно было скрестить таблицы то нужно было бы использовать 2 вариант
 

FractalizeR

Новичок
findnext,
Вы сами понимаете о чем говорите вообще?
Сорри, я сдаюсь :)) Мне вас не исправить.

Swat, как у вас дела? :)
 

findnext

Новичок
FractalizeR
100% понимаю о чём речь, я тоже устал спорить...надо бы поработать.

-~{}~ 17.12.08 16:58:

FractalizeR
P.S это не то что я придумал сам, это теория баз данных

-~{}~ 17.12.08 16:58:

если статус у меня новичёк то это не означает что я ламер

-~{}~ 17.12.08 17:11:

ну ладно, второй вариант считывать всё в трёхдеминсиональный массив и в цикле уже выбирать то что надо, только тут намного больше гемороя будет
 

Swat

Новичок
FractalizeR
о боже )))) я так и не перечитал все т.к. почти ничего не понял)))
но, спасибо всем за предложенные идеи ;)
 

FractalizeR

Новичок
Автор оригинала: Swat
FractalizeR
о боже )))) я так и не перечитал все т.к. почти ничего не понял)))
но, спасибо всем за предложенные идеи ;)
Не советую читать все в этой теме :))

Просто по-подробнее расскажите про вашу проблему.
 

findnext

Новичок
Swat
Не это ли вам нужно?
PHP:
define("PORTRAIT", 10);
define("LANDSCAPE", 10);
$table = array();

function change_letter($i){
  $the_letter_string = " ABCDEFGHIJ";
  return substr($the_letter_string, $i, 1);  	
}
//POPULATE TABLE (RANDOM NUMBERS) FOR TESTING PURPOSES ONLY
for ($i = 1; $i <= LANDSCAPE; $i++){
	
	$table_letter = change_letter($i);
	
	for ($a = 1; $a <= PORTRAIT; $a++){
		
	   $table[$table_letter][$a][] = $i.$a; //rand(5,15);	
	}
	
}
//var_dump($table);

  
 foreach ($table as $k=>$v){
	// cell number
	$coord_num_1    = 3;
	// cell 1 letter
	$coord_letter_1 = "A";
	// cell 2 letter
	$coord_letter_2 = "C";
	
	if ($k == $coord_letter_2){
		
		echo "The value of ".$coord_letter_1.$coord_num_1."x".$coord_letter_2." is " . $v[$coord_num_1][0];
		
	}
		
}
 
Сверху