Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Объединить три SQL-запроса в один

Сообщения:  [1-10]   [11-14] 

 
 автор: tima2010   (12.12.2011 в 23:05)   письмо автору
 
   для: cheops   (12.12.2011 в 22:58)
 

Спасибо, хочу все знать, с Вами и форумом softtime мы становимся умнее :)
все таки решил добить этот вопрос, разберусь и напишу здесь ответ, найду альтернативный вариант более простой и компактный

  Ответить  
 
 автор: cheops   (12.12.2011 в 22:58)   письмо автору
 
   для: tima2010   (12.12.2011 в 22:45)
 

Тут штука в том, что у вас таблица не до конца нормализована - это ускоряет ряд запросов, но приводит к более зубодробительным SQL-запросам. С одной стороны недонормированная таблица - это не частое явление (возникает там, где нужна скорость), поэтому и запросы могут выглядеть немного странно. С другой стороны SQL знают мало, как правило, на нём даже специализируются (т.е. изучают только его), изучать его не просто - так как это декларативный язык. Вот если вы знаете императивный язык вроде PHP, то выучить другой императивный язык вам будет проще, третий еще проще. А SQL, хоть пять императивных языков знайте - придется учить с нуля. Разработчикам же база данных зачастую нужна для хранения информации, а не чтобы программы на SQL писать, поэтому возможности SQL используются довольно слабо и на это есть причины. Мало составить SQL-запрос, так его и другие понять должны... в общем тут палка о двух концах, с одной стороны SQL еще и не такое позволяет, а с другой сложный запрос может затормозить развитие системы, если к нему никто не будет знать как подступиться. Аналогичная ситуация и в других системах, например связка PHP + HTML/JavaScript - куда ударение ставить, зависит от квалификации, нагрузки и возможностей. Связей таких в мире IT довольно много, все знать все-равно не будете, поэтому нужно выбирать что и на каком уровне вы будете знать, какие инструменты использовать на полную катушку, а какие лишь поверхностно.

PS Понятно, что чем больше вы знаете, тем вы более востребованы как специалист.

  Ответить  
 
 автор: tima2010   (12.12.2011 в 22:45)   письмо автору
 
   для: cheops   (12.12.2011 в 22:43)
 

ясно, спасибо! буду разбирать ваш запрос по словам чтобы его понять

>>Ммм... не очень понятно, что значит ранее.
имею введу не встречал таких тем и статей )
и читая Ваши слова: "Тогда вероятно придется какой-то такой запрос использовать"
подумал что как будто это не обычно

  Ответить  
 
 автор: cheops   (12.12.2011 в 22:43)   письмо автору
 
   для: tima2010   (12.12.2011 в 22:27)
 

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

>p.s. а что быстрее работает, ваш вариант или мой?
Измерять надо (от индексации еще зависит - можно и так и эдак повернуть), если накладные расходы по обмену запросами с сервером не велики, большой разницы быть не должно.

  Ответить  
 
 автор: tima2010   (12.12.2011 в 22:27)   письмо автору
 
   для: cheops   (10.12.2011 в 14:44)
 

Большое спасибо, но неужели ранее поиск не осуществлялся при такой структуре таблицы:


id | myid | key   | value
1    1      name    tima
2    1      lang    rus
3    1      state   какой либо текст
4    2      name    tima
5    2      lang    rus
6    2      state   мой особый текст
7    3      name    tima
8    3      lang    rus
9    3      state   не совпадающий статус
10   4      name    cheops
11   4      lang    eng
12   4      state   текст текст текст


и нужно к примеру получить myid которые соответствует всем 3-м запросам поиска
Найти myid где
имя tima
где язык rus
где в статусе есть слово "текст"

p.s. а что быстрее работает, ваш вариант или мой?

  Ответить  
 
 автор: cheops   (10.12.2011 в 14:44)   письмо автору
 
   для: tima2010   (09.12.2011 в 23:52)
 

Тогда вероятно придется какой-то такой запрос использовать, ну или начать отталкиваться от него
SELECT
  fst.myid AS myid
FROM
  (SELECT
     myid
   FROM
     mytable
   WHERE
     key='name' AND
     value='$name') AS fst
JOIN
  (SELECT
     myid
   FROM
     mytable
   WHERE
     key='lang' AND
     value LIKE '%$lang%') AS snd
ON
  fst.myid = fst.snd
JOIN
  (SELECT
     myid
   FROM
     mytable
   WHERE
     key='state' AND
     value='$state') AS thd
ON
  snd.myid = thd.snd

  Ответить  
 
 автор: tima2010   (09.12.2011 в 23:52)   письмо автору
 
   для: cheops   (09.12.2011 в 23:26)
 

Да, Вы все верно поняли, получается мне нужно выбрать myid который соответствует всем 3 запросам.

  Ответить  
 
 автор: cheops   (09.12.2011 в 23:26)   письмо автору
 
   для: tima2010   (09.12.2011 в 23:02)
 

Правильно ли я понимаю, что все три запроса возвращают одно и тоже значение?
SELECT myid FROM mytable WHERE key='name' AND value='$name' ORDER BY `myid` 
SELECT myid FROM mytable WHERE key='lang' AND value LIKE '%$lang%' ORDER BY `myid` 
SELECT myid FROM mytable WHERE key='state' AND value='$state' ORDER BY `myid`
А вы хотите получить одно значение при условии, что значения, возвращаемые всеми тремя запросами одинаковые?

  Ответить  
 
 автор: tima2010   (09.12.2011 в 23:02)   письмо автору
 
   для: cheops   (09.12.2011 в 19:34)
 

Существует форма выбора записи:
1. Имя
2. Язык
3. Статус

далее нужно найти в таблице ID запись которая соответствует всем 3 параметрам,
все параметры записаны в value в одной таблице

  Ответить  
 
 автор: cheops   (09.12.2011 в 19:34)   письмо автору
 
   для: tima2010   (09.12.2011 в 19:09)
 

Вы вибираете какое-то одно значение из первых трех запросов или вам нужно их свести в один? Предложенный вариант просто сворачивает три отдельных запроса в один. Здесь не только логика ИЛИ используется, она используется совместно с И.

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования