1

Тема: Як написати запит до MySQL з ітератором в коді PHP

За допомогою редактора MySQL (доречі, не phpMyAdmin) справно працює запит типу
[code=mysql]
SELECT
    @i:=@i+1 AS iterator,
    t.*
FROM
    tablename AS t,
    (SELECT @i:=0) AS foo
[/code]
Цей спосіб застосовується для лічильника рядків. Але він не хоче коректно працювати в запиті, який я пишу в PHP.
Ніхто не в курсі як це обійти?

2

Re: Як написати запит до MySQL з ітератором в коді PHP

А що, COUNT не працює?
Ну і "не хоче коректно працювати" - це не опис проблеми. Якщо не хоче - поговоріть із ним, попросіть лагідно.

3

Re: Як написати запит до MySQL з ітератором в коді PHP

Мабуть мається на увазі отримати для кожного рядка порядковий номер. Я би такі штуки краще робив в PHP, що і вам рекомендую зробити.

4

Re: Як написати запит до MySQL з ітератором в коді PHP

Replace написав:

Мабуть мається на увазі отримати для кожного рядка порядковий номер. Я би такі штуки краще робив в PHP, що і вам рекомендую зробити.

Дякую. Я так би і робив, якщо б результати запита мені треба було виводити в PHP. Але на даний момент в мене задача стоїть щоб зробити JOIN із таким селектом, а потім зробити UPDATE.
Думаю тут процедурою можна обійтись, але це трохи менш бажаний варіант.

5

Re: Як написати запит до MySQL з ітератором в коді PHP

Дякую. Я так би і робив, якщо б результати запита мені треба було виводити в PHP. Але на даний момент в мене задача стоїть щоб зробити JOIN із таким селектом, а потім зробити UPDATE.
Думаю тут процедурою можна обійтись, але це трохи менш бажаний варіант.

Все таки краще в PHP. Це має безліч переваг.
1. на будь якому етапі зрозуміло що відбувається
2. легше додавати новий функціонал
3. кешування результатів
і взагалі швидша розробка ;)

6 Востаннє редагувалося ktretyak (09.03.2014 15:46:36)

Re: Як написати запит до MySQL з ітератором в коді PHP

Є ще один очевидний варіант для вирішення цієї задачі - створити темпову таблицю з auto_increment, потім заінсертити в неї всі потрібні значення, по яким буде відбуватись JOIN, ну і потім вже робити UPDATE. Але це мабуть все-таки костиль, а не нормальне рішення.

Оновлено:
Тю, нічого не розумію. Коли роблю простий селект із зазначеним ітератором, то насправді все чудово працює і з подачі PHP до MySQL. Але коли роблю JOIN, то працює некоректно - ітератор видає лише одиницю, тобто значення глобальної змінної  MySQL скидається по якісь причині.

Оновлено:
Трохи переписав запит, то запрацювало вже коректно і в PHP. Але ж дивно, що старий запит працював лише в MySQL. Я так і не зрозумів чому...

7

Re: Як написати запит до MySQL з ітератором в коді PHP

спробуйте в консолі, можливо трабли з вашим редактором)

8

Re: Як написати запит до MySQL з ітератором в коді PHP

funivan написав:

спробуйте в консолі, можливо трабли з вашим редактором)

Ні, редактор працює як належить. Він може хіба що тільки "падати" інколи. Доречі, я працюю на Windows і використовую HeidiSQL.
Між іншим - по юзабіліті він є найкращим безкоштовним редактором, на якому мені доводилось працювати.

9

Re: Як написати запит до MySQL з ітератором в коді PHP

А юзер від якого конектитесь в PHP мав права на доступ до потрібних табличок?

10 Востаннє редагувалося ktretyak (10.03.2014 16:27:45)

Re: Як написати запит до MySQL з ітератором в коді PHP

Vo_Vik написав:

А юзер від якого конектитесь в PHP мав права на доступ до потрібних табличок?

Так мав. При UPDATE повертався результат, що успішно все оновилось.

В мене був запит з декількома рівнями підзапитів. І здається я трохи був лоханувся із розміщенням псевдозапиту типу
[code=sql](SELECT @r:=0) AS foo[/code]
Мені його треба було розмістити разом із тим запитом, який використовує глобальну змінну MySQL @r. Але спочатку я цього не зробив. І коли тестував це все діло в редакторі MySQL, то змінна не обнулялась, бо вона закріплялась за поточною сесією (в редакторі сесія видаляється як у браузера - після його закриття). Ну і, як ви розумієте, коли я тестував запити вже через PHP, то не використовувалось постійне з'єднання із БД, а тому змінні обнулялись...
Такі справи.