|
|
|
| Можно ли создать запрос, такой чтобы выбирал данные со значением равным в одном поле, заведомо нам не известным, т.е. выбрало по условиям данные и если есть еще данные, которые содержать такое же значением в сравнимом поле, то и те данные тоже выбрать.. можно ли это в одном запросе сделать? | |
|
|
|
|
|
|
|
для: xpom
(20.07.2011 в 21:00)
| | можно | |
|
|
|
|
|
|
|
для: Valick
(20.07.2011 в 21:02)
| | а как не подскажите? HAVING поставить и под условием, поле в котором нужно найти совпадение приравнять? т.е. HAVING pole1=pole1 | |
|
|
|
|
|
|
|
для: xpom
(20.07.2011 в 21:16)
| | подскажу как только опишите поля таблиц и дадите условия выборки | |
|
|
|
|
|
|
|
для: Valick
(20.07.2011 в 21:45)
| | минуточку, пишу!
Поля таблицы septer: prodID, name, description,odelm
Выбираем вот эти все поля ,с условием prodID равным $perem1 и все остальные данные, у которых значение в поле odelm совпадают
С сортировкой, первый с prodID равным $perem1, а остальные по полю name | |
|
|
|
|
|
|
|
для: 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)
|
попробуйте так | |
|
|
|
|
|
|
|
для: Valick
(20.07.2011 в 23:46)
| | спасибо большое, я даже не знал, что в MySQL запрос так можно влаживать | |
|
|
|
|
|
|
|
для: xpom
(21.07.2011 в 17:21)
| | можно еще и не так влаживать :)
главное чтоб prodID было уникальным, а то коллапс получится
__
запрос работает? а то писал из головы негде было опробировать | |
|
|
|
|
|
|
|
для: 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) вроде работает! | |
|
|
|
|
|
|
|
для: xpom
(21.07.2011 в 18:24)
| | prodID<>$perem1 - это чтобы первая строка не повторялась далее в выборке
а по поводу odelm <>0, я так понимаю если odelm=0 то запрос должен вернуть одну строку? | |
|
|
|
|
|
|
|
для: Valick
(21.07.2011 в 19:28)
| | а да, тоеретически она должна повторятся...но что то вроде не повторялась..значит вернем prodID<>$perem1
да, да все правильно, если odelm=0 то запрос должен вернуть одну строку! | |
|
|
|
|
|
|
|
для: xpom
(21.07.2011 в 20:36)
| | тогда ОК, но есть одно но)) нужно проверить скорость работы этого запроса, может 2 запроса будут работать быстрее, а уж если odelm=0 часто фигурирует в выборке, то точно можно сократить по условию и второй запрос можно просто не посылать | |
|
|
|
|
|
|
|
для: Valick
(21.07.2011 в 20:51)
| | мм а как проверить на скорость один запрос и два запроса? Я думал почему то, чем меньше запросов, тем быстрее работает!
Т.е. сделать отдельные запросы и если odelm=0
if($odelm!=0) {//делаем запрос к базе с выбором WHERE odelm=$odelm }
|
если не ноль, делаем второй запрос, а так только один запрос делаем! Так получается будет быстрей? | |
|
|
|
|
|
|
|
для: xpom
(22.07.2011 в 12:28)
| | да, именно так, но я же говорил если большинство запросов будут odelm=0, а проверить запросы можно прямо в phpmyadmin вкладка SQL, правда желательно чтобы база была большая, а то разницу можно и не заметить
и поле odelm должно иметь индекс скорее всего. | |
|
|
|
|
|
|
|
для: Valick
(22.07.2011 в 13:03)
| | я пока не знаю сколько будет odelm равнятся нулю..но наверное не мало...так что думаю, есть смысл поставить условие на odelm ...
база пока пустая, навряд ли тогда получится проверить...я пока руками базу делаю, для проверки | |
|
|
|