За последние 24 часа нас посетили 17602 программиста и 1281 робот. Сейчас ищут 1449 программистов ...

Ну работает запрос

Тема в разделе "MySQL", создана пользователем Вльдемар, 19 мар 2007.

  1. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    есть такой запрос
    [sql]SELECT u.login, u.id,
    (SELECT SUM( f.forecast_result )
    FROM FR_Forecasts f
    INNER JOIN FR_Games g ON f.id_game = g.id
    INNER JOIN FR_Turs turs ON g.id_tur = turs.id
    WHERE u.id = f.id_user
    AND turs.id in( '30')) AS sum_point
    FROM FR_Users u
    ORDER BY sum_point DESC , u.login ASC [/sql]

    на одном хостинге на MySQL - 4.1.11-Debian_4sarge2-log работает
    а на MySQL 4.1.18 не хочет

    поле sum_point = NULL
    Если вместо
    [sql]AND turs.id in( '30') [/sql]
    написать
    [sql]AND turs.id in( '30', '29') [/sql]
    или [sql]AND turs.id = 30 [/sql]

    то работает

    Может кто знает решение какое нибудь?
     
  2. Goryn

    Goryn Активный пользователь

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    В in( '30') - зачем кавычки, если я правильно понял turs.id числовое поле....
     
  3. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Пофигу, работать будет и так и так
    Я решил проблему так
    [sql] AND turs.id IN('30', '')[/sql]
    Больше не знаю как можно было решить
     
  4. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Вльдемар
    У тебя ID скорее всего ведь в массиве?
    Тогда сделай так
    PHP:
    1. <?
    2. $ids[] = 30;
    3. $special_where = '';
    4. if (count($ids) > 1){
    5.   $special_where = 'IN('.implode(',', $ids).')';
    6. }else{
    7.   $special_where = '= '.$ids[0];
    8. }
    9. $result = mysql_query('SELECT u.login, u.id,
    10. (SELECT SUM( f.forecast_result )
    11. FROM FR_Forecasts f
    12. INNER JOIN FR_Games g ON f.id_game = g.id
    13. INNER JOIN FR_Turs turs ON g.id_tur = turs.id
    14. WHERE u.id = f.id_user
    15. AND turs.id '.$special_where.') AS sum_point
    16. FROM FR_Users u
    17. ORDER BY sum_point DESC , u.login ASC');
    18. ?>
    19.  
     
  5. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Я пользуюсь библиотекой Котерова(еще placeholder) и туда просто массив передать нужно.
    Я так сделал
    PHP:
    1.  
    2. <?
    3. $id=explode(';',  $turs);
    4. $id[]='';
    5. // а тут запрос
    6. ?>
    7.  
    все равно пустых полей id в базе нет

    До меня просто не доходит почему в одной версии работает, а во второй не нет.
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Глюк конкретной версии наверно. Пошарь по багтрекеру MySQL'a