Набор запросов в PHP, чтобы показать размещение различных кабин


Итак, как я могу узнать больше о PHP и действительно стремиться улучшить мой код у меня есть несколько вопросов о текущей настройке шахты и как к ней подойти наилучшим образом.

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

Сценарий: сценарий в вопрос cabins.php которые в основном вытягивает информацию из базы данных для заполнения страницы с информацией кабина, основанные на кабине идентификатор массива $_GET переменной. Так, пользователь нажимает на домик, затем страница заполняется, что каюты информация. Есть четыре подменю, чтобы выбрать из Для каждой каюты, так что я доступ к этой информации с помощью оператора switch, но у меня возникли проблемы с поиском лучший способ, чтобы выполнить мои запросы.

Мои данные структурированы, что большинство кабина информация хранится в cabin_content' но у меня есть cabin_large_images " и " cabin_small_images, по которым каждый трюм изображений, которые привязаны к cabin_content стол через cabin_id.

В каждом подразделе требуется разная информация из таблицы cabin_content, но в каждом подразделе всегда требует все изображения из cabin_large_images, что соответствует идентификатору салоне.

Поэтому каждый раздел такой: -мы должны cabin_content запрос и получить конкретную информацию нам нужно -мы должны cabin_large_images запрос и получить все изображения с cabin_id.

Одна секция требует все вышеперечисленное плюс мы должны cabin_small_images запрос и получить все изображения из этой таблицы с соответствующим ID кабины.

Так что сейчас у меня он настроен так, что я знаю, что нуждается в улучшении...очевидно, именно поэтому я здесь...псевдо код:

if(isset($_GET['cabin')){

 //run the query to get cabin_large_images because we know we need them regardless of the section

   if(isset($_GET['type'])){
      $type = $_GET['type'];

       switch ($type){

       case 'a':

//run the query on cabin_content for the specific info we need in this situation

       break;

       case 'b':

//run the query on cabin_content for the specific info we need in this situation

       break;

       case 'c':

//run the query on cabin_content for the specific info we need in this situation
//run an additional query on cabin_small_images

       break;


      }

 }




//populate content to view

Итак, очевидно, что я не люблю об этом мы аж три запроса на загрузку страницы. Я пытался использовать внутренние соединения, но я просто не мог открыть то, что мне нужно из запроса правильно:

SELECT cabin_name, peak_week, max_occupancy, image 
FROM cabin_content  
INNER JOIN cabin_images  
  ON cabin_content.cabin_id = cabin_images.cabin_id 
WHERE cabin_content.cabin_id = '$cabin'";

Проблема здесь заключается в том, что мы можем в конечном итоге с несколькими изображениями от $строки['изображения'] что тогда мы должны перебрать в представлении. Теперь мы еще больше усугубят ситуацию, когда к делу " с " мы также должны cabin_small_images запроса:

SELECT cabin_name, peak_week, max_occupancy, image, image_small 
FROM cabin_content  
INNER JOIN cabin_images  
  ON cabin_content.cabin_id = cabin_images.cabin_id 
INNER JOIN cabin_small_images 
  ON cabin_images.cabin_id = cabin_small_images.cabin_id 
WHERE cabin_content.cabin_id = '$cabin'";

Так, что мне нужно, все регулярное содержание, и мне нужно, чтобы выполнить итерации через 'изображения' и 'small_images' и я просто не мог получить это право.

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



224
5
задан 6 декабря 2011 в 10:12 Источник Поделиться
Комментарии
2 ответа

Нет ничего плохого в использовании нескольких запросов. Три простых запроса или один, запутанный запрос монстра. Вариант угадать, что будет вызывать у вас меньше проблем в долгосрочной перспективе?

Вы получите дополнительные накладные расходы на парсинг трех запросов, но примерно такой же объем работы для СУБД, чтобы получить данные в обоих случаях.

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

3
ответ дан 7 декабря 2011 в 01:12 Источник Поделиться

Я не 100% уверен, что вы спрашиваете.. и лично я не вижу ничего плохого в использовании нескольких запросов. Но я думаю, что вы ищете Союз

SELECT 
cc.cabin_name
,cc.peak_week
,cc.max_occupancy
,'Large' as ImageType
,ci.image
FROM cabin_content cc
INNER JOIN cabin_images ci ON cc.cabin_id = ci.cabin_id
WHERE cc.cabin_id = '$cabin';
Union
SELECT
cc.cabin_name
,cc.peak_week
,cc.max_occupancy
,'Small' as ImageType
,csi.image_small
FROM cabin_content cc
INNER JOIN cabin_small_images csi ON cc.cabin_id = csi.cabin_id
WHERE cabin_content.cabin_id = '$cabin';

0
ответ дан 6 декабря 2011 в 10:12 Источник Поделиться