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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Запрос с выбором значением совпадающем в поле
 
 автор: xpom   (20.07.2011 в 21:00)   письмо автору
 
 

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

  Ответить  
 
 автор: Valick   (20.07.2011 в 21:02)   письмо автору
 
   для: xpom   (20.07.2011 в 21:00)
 

можно

  Ответить  
 
 автор: xpom   (20.07.2011 в 21:16)   письмо автору
 
   для: Valick   (20.07.2011 в 21:02)
 

а как не подскажите? HAVING поставить и под условием, поле в котором нужно найти совпадение приравнять? т.е. HAVING pole1=pole1

  Ответить  
 
 автор: Valick   (20.07.2011 в 21:45)   письмо автору
 
   для: xpom   (20.07.2011 в 21:16)
 

подскажу как только опишите поля таблиц и дадите условия выборки

  Ответить  
 
 автор: xpom   (20.07.2011 в 21:56)   письмо автору
 
   для: Valick   (20.07.2011 в 21:45)
 

минуточку, пишу!
Поля таблицы septer: prodID, name, description,odelm
Выбираем вот эти все поля ,с условием prodID равным $perem1 и все остальные данные, у которых значение в поле odelm совпадают
С сортировкой, первый с prodID равным $perem1, а остальные по полю name

  Ответить  
 
 автор: Valick   (20.07.2011 в 23:46)   письмо автору
 
   для: xpom   (20.07.2011 в 21:56)
 

(SELECT prodID, name, description,odelm 
   FROM septer
   WHERE prodID=$perem1)

UNION

(SELECT prodID, name, description,odelm
   FROM septer
   WHERE odelm=(SELECT odelm FROM septer WHERE prodID=$perem1)
           AND prodID<>$perem1
   ORDER BY name)

попробуйте так

  Ответить  
 
 автор: xpom   (21.07.2011 в 17:21)   письмо автору
 
   для: Valick   (20.07.2011 в 23:46)
 

спасибо большое, я даже не знал, что в MySQL запрос так можно влаживать

  Ответить  
 
 автор: Valick   (21.07.2011 в 17:37)   письмо автору
 
   для: xpom   (21.07.2011 в 17:21)
 

можно еще и не так влаживать :)
главное чтоб prodID было уникальным, а то коллапс получится
__
запрос работает? а то писал из головы негде было опробировать

  Ответить  
 
 автор: xpom   (21.07.2011 в 18:24)   письмо автору
 
   для: Valick   (21.07.2011 в 17:37)
 

круто конечно)
да вроде ж уникальный prodID!
Вроде работает, данных пока не много, еще проверю как побольше внесу...я немножко исправил, Вы написали условие AND prodID<>$perem1 чтобы не равно было, а я его убрал, это не обязательно я думаю, мне все равно другие prodID равны $perem1 или нет, ID разный все равно, главное что по полю odelm есть совпадение..и еще если в поле odelm есть 0, не нужно совпадение, я дописал (SELECT odelm FROM septer WHERE prodID=$perem1 AND odelm <>0) вроде работает!

  Ответить  
 
 автор: Valick   (21.07.2011 в 19:28)   письмо автору
 
   для: xpom   (21.07.2011 в 18:24)
 

prodID<>$perem1 - это чтобы первая строка не повторялась далее в выборке
а по поводу odelm <>0, я так понимаю если odelm=0 то запрос должен вернуть одну строку?

  Ответить  
 
 автор: xpom   (21.07.2011 в 20:36)   письмо автору
 
   для: Valick   (21.07.2011 в 19:28)
 

а да, тоеретически она должна повторятся...но что то вроде не повторялась..значит вернем prodID<>$perem1

да, да все правильно, если odelm=0 то запрос должен вернуть одну строку!

  Ответить  
 
 автор: Valick   (21.07.2011 в 20:51)   письмо автору
 
   для: xpom   (21.07.2011 в 20:36)
 

тогда ОК, но есть одно но)) нужно проверить скорость работы этого запроса, может 2 запроса будут работать быстрее, а уж если odelm=0 часто фигурирует в выборке, то точно можно сократить по условию и второй запрос можно просто не посылать

  Ответить  
 
 автор: xpom   (22.07.2011 в 12:28)   письмо автору
 
   для: Valick   (21.07.2011 в 20:51)
 

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

Т.е. сделать отдельные запросы и если odelm=0
 if($odelm!=0) {//делаем запрос к базе с выбором WHERE odelm=$odelm }

если не ноль, делаем второй запрос, а так только один запрос делаем! Так получается будет быстрей?

  Ответить  
 
 автор: Valick   (22.07.2011 в 13:03)   письмо автору
 
   для: xpom   (22.07.2011 в 12:28)
 

да, именно так, но я же говорил если большинство запросов будут odelm=0, а проверить запросы можно прямо в phpmyadmin вкладка SQL, правда желательно чтобы база была большая, а то разницу можно и не заметить
и поле odelm должно иметь индекс скорее всего.

  Ответить  
 
 автор: xpom   (22.07.2011 в 14:34)   письмо автору
 
   для: Valick   (22.07.2011 в 13:03)
 

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

  Ответить  
Rambler's Top100
вверх

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