PHP. Один SELECT и несколько разных условий

12
K
На сайте с 17.05.2016
Offline
25
1221

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

Суть:

Есть в одном файле такая вещь:


$decks1 = mysql_query("SELECT * FROM decks WHERE iddeck='25' AND value != '0' AND cardclass='7' );
....
$decks2 = mysql_query("SELECT * FROM decks WHERE iddeck='26' AND value != '0' AND cardclass='0' );

Как видно, различия только в двух условиях. Как сделать так, чтобы был только


$decks = mysql_query("SELECT * FROM decks WHERE value != '0' );

а дальше уже задаем условие iddeck и cardclass?

Проверенная видеореклама (https://goo.gl/vhomjx) для любых сайтов Нормальные пацаны покупают и продают сайты здесь (https://goo.gl/nKv5Vk)
Gerga
На сайте с 02.08.2015
Offline
94
#1

knak, а зачем?

То, что сейчас лучше, чем сначала получить все строки, где value != '0', а затем уже с полученного найти строки по iddeck и cardclass.

hitboss
На сайте с 15.01.2015
Offline
61
#2

например

SELECT * FROM decks WHERE value != '0'

AND

(

(iddeck='25' AND cardclass='7')

OR

(iddeck='26' AND cardclass='0')

)

K
На сайте с 17.05.2016
Offline
25
#3

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

R
На сайте с 20.02.2015
Offline
59
#4


SELECT условия
UNION ALL
SELECT условия

http://www.mysql.ru/docs/man/UNION.html

K
На сайте с 17.05.2016
Offline
25
#5

хм... пришла в голову идея...

делаем раз - создаем select.php


$decks1 = mysql_query("SELECT * FROM decks WHERE iddeck='$iddeck' AND value != '0' AND cardclass='$cardclass' );

делаем два - на самой странице: page.php


$iddeck = "25";
$cardclass = "7";
include 'http://.../select.php';

$iddeck = "26";
$cardclass = "0";
include 'http://.../select.php';

$iddeck = "27";
$cardclass = "3";
include 'http://.../select.php';

Нагрузку не снимет, но хоть править меньше... чё я раньше об этом не подумал...!?

TF-Studio
На сайте с 17.08.2010
Offline
334
#6

10 запросов на страницу на маленькой БД без джойнов - вполне приемлемо

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
K
На сайте с 17.05.2016
Offline
25
#7
rereg:

SELECT условия
UNION ALL
SELECT условия

http://www.mysql.ru/docs/man/UNION.html

Спасибо! Но это немного не то... Это ничем не проще текущего кода. Так же куча куч SELECTов...

hitboss
На сайте с 15.01.2015
Offline
61
#8
rereg:

SELECT условия
UNION ALL
SELECT условия

http://www.mysql.ru/docs/man/UNION.html

неэкономно

согласно explain

в вашем случае будет произведено 2 прохода

1 PRIMARY table Using where

2 UNION table Using where

UNION RESULT Using temporary

а в случае селекта будет 1 запрос

K
На сайте с 17.05.2016
Offline
25
#9
hitboss:
например

SELECT * FROM decks WHERE value != '0'

AND

(

(iddeck='25' AND cardclass='7')
OR
(iddeck='26' AND cardclass='0')

)

не совсем понял как мне потом эти данные вывести на страницу, чтобы iddeck 25 и 26 были раздельны

[Удален]
#10

Создайте функцию, которая принимает изменяющиеся параметры и формирует запрос т.е. как - то так:


function myquery( $id, $cardclass ) {
return mysql_query("SELECT * FROM decks WHERE iddeck=$id AND value != '0' AND cardclass=$cardclass );
}

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


потом эти данные вывести на страницу, чтобы iddeck 25 и 26 были раздельны

но если хотите прооптимизировать, то делайте выборку всех нужных элементов страницы в словарь где ключи будут id и cardclass, тогда можно вытащить одним запросом ( если изменяющиеся параметры конечно позволят )

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий