Вывожу на главной странице 3 разных статьи (самая новая, самая лучшая, самая отправляемая).
Делаю это так:
PHP
А как это можно сделать не через жопу?

Спустя 12 минут, 22 секунды (22.02.2007 - 21:32) plazix написал(а):
я б не сказал, что это через жопу
можно засунуть все в один запрос, объединив имеющиеся 3 оператором UNION
можно засунуть все в один запрос, объединив имеющиеся 3 оператором UNION
Спустя 3 минуты, 43 секунды (22.02.2007 - 21:36) Timok написал(а):
как-то странно ты вычисляешь макс. значение...
обычно делают проще
хотя не знаю есть ли здесь существенная разница...
Код
SELECT * FROM posttxt where validate='1' ORDER BY rate DESC limit 1
обычно делают проще
Код
SELECT MAX(`rate`) FROM `posttxt` WHERE `validate`=1
хотя не знаю есть ли здесь существенная разница...
Спустя 13 минут, 5 секунд (22.02.2007 - 21:49) plazix написал(а):
Цитата(Timok @ 22.2.2007, 19:36) [snapback]14021[/snapback]
обычно делают проще
Код
SELECT MAX(`rate`) FROM `posttxt` WHERE `validate`=1
насколько я помню MAX(`rate`) возвращает максимальное значение в столбце rate , а не строку, где rate максимально
Спустя 23 минуты, 59 секунд (22.02.2007 - 22:13) Timok написал(а):
ну тогда можно так
хотя то же извращения... и может не работать в старых версиях мускула
Код
SELECT * FROM `posttxt` WHERE `rate`=(SELECT MAX(`rate`) FROM `posttxt` WHERE validate=1)
хотя то же извращения... и может не работать в старых версиях мускула
Спустя 28 минут, 34 секунды (22.02.2007 - 22:42) Patrick написал(а):
Цитата
SELECT * FROM posttxt where validate='1' and (date_add between '".date('Y-m-d',mktime (0,0,0,date('m'),date('d')-$newperiod-1,date('Y')))."' and '".date('Y-m-d')."') ORDER BY date_add DESC limit 1"
Полный изврат! between работает намного медленне, чем union
Спустя 50 минут, 32 секунды (22.02.2007 - 23:32) plazix написал(а):
Цитата(Timok @ 22.2.2007, 20:13) [snapback]14023[/snapback]
ну тогда можно так
Код
SELECT * FROM `posttxt` WHERE `rate`=(SELECT MAX(`rate`) FROM `posttxt` WHERE validate=1)
хотя то же извращения... и может не работать в старых версиях мускула
про LIMIT 1 забыл, надо выбрать только одну статью
Код
mysql> CREATE TABLE test (
-> id INT(11) NOT NULL AUTO_INCREMENT,
-> txt TEXT NOT NULL,
-> date DATETIME,
-> validate CHAR,
-> rate INT(11) NOT NULL,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.50 sec)
.................................................................
mysql> EXPLAIN SELECT * FROM test WHERE validate='1' ORDER BY date DESC LIMIT 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
| 1 | SIMPLE | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM test WHERE validate='1' AND rate=(SELECT MAX(rate) FROM test WHERE validate='1') LIMIT 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| 1 | PRIMARY | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where |
| 2 | SUBQUERY | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
2 rows in set (0.01 sec)
-> id INT(11) NOT NULL AUTO_INCREMENT,
-> txt TEXT NOT NULL,
-> date DATETIME,
-> validate CHAR,
-> rate INT(11) NOT NULL,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.50 sec)
.................................................................
mysql> EXPLAIN SELECT * FROM test WHERE validate='1' ORDER BY date DESC LIMIT 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
| 1 | SIMPLE | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM test WHERE validate='1' AND rate=(SELECT MAX(rate) FROM test WHERE validate='1') LIMIT 1;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| 1 | PRIMARY | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where |
| 2 | SUBQUERY | test | ALL | NULL | NULL | NULL | NULL | 32768 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
2 rows in set (0.01 sec)
в первом варианте используется filesort (что увеличивает время выполнения запроса), а во втором обрабатывается в 2 раза больше строк, впринципе при не большом количестве данных они равносильны (но предпочтительней на мой взгляд второй запрос), при этом первый проще и понятней, ну и короче

Спустя 2 минуты, 21 секунда (22.02.2007 - 23:34) larin написал(а):
spiderbuber
Если выбирать между 3-мя запросами либо "одним" с union
Я бы на твоем месте выбрал 3 запроса.
Если выбирать между 3-мя запросами либо "одним" с union
Я бы на твоем месте выбрал 3 запроса.
Спустя 5 минут, 59 секунд (22.02.2007 - 23:40) plazix написал(а):
Цитата(larin @ 22.2.2007, 21:34) [snapback]14031[/snapback]
spiderbuber
Если выбирать между 3-мя запросами либо "одним" с union
Я бы на твоем месте выбрал 3 запроса.
угу, я для примера привел
единственное что здесь надо оптимизировать так это
Цитата
Спустя 51 минута, 7 секунд (23.02.2007 - 00:32) Patrick написал(а):
Лучше послушай что тебе люди говорят....
Сталкивался с проблемами когда подобные запросы на одной машине работают, на другой просто валятся...
Сталкивался с проблемами когда подобные запросы на одной машине работают, на другой просто валятся...
Спустя 11 часов, 37 минут, 51 секунда (23.02.2007 - 12:09) spiderbuber написал(а):
OK! Примем к сведению. Я же хотел как-то вот это сократить:
Т.к. оно встречается 3 раза подряд. Можно же как-то это сделать? Условия где-нибудь натыкать?
PHP
Т.к. оно встречается 3 раза подряд. Можно же как-то это сделать? Условия где-нибудь натыкать?
Спустя 27 минут, 59 секунд (23.02.2007 - 12:37) plazix написал(а):
ну тут сокращать особо не чего, можно вынести в отдельную функцию, например
но необходимости в этом я не вижу
PHP
function query($sql) { }
но необходимости в этом я не вижу
Цитата
Условия где-нибудь натыкать?
????? _____________