|
Автор |
Съобщение |
Нов
Регистриран на: 02/01/2016 11:49 pm
Support:
Bonus: 0
Мнения: 45
|
27/06/2018 7:44 pm
|
|
|
Revelation написа: | Я си оправи малко къдравите скоби, че нещо не разбирам къде какво отваряш, какво затваряш...  |
Намерих едни излишни ... Не зная дали са само те. |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 779
|
27/06/2018 7:57 pm
|
|
|
Има още излишни и код излишен(направо грешен).
Сега ще ти го надраскам набързо. Няма да го тествам, че не ми се правят тестови данни в момента.
Междувременно, тествай заявката дали ти връща резултатите, които очакваш и пиши.
|
|
Върнете се в началото |
|
|
Нов
Регистриран на: 02/01/2016 11:49 pm
Support:
Bonus: 0
Мнения: 45
|
27/06/2018 8:04 pm
|
|
|
Много ти благодаря - махах, слагах, променях - никакъв ефект. Само това ми остана от целия проект. Ще тествам и ще пиша. Благодаря!
|
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 779
|
27/06/2018 8:18 pm
|
|
|
PHP code: <?php
// connection
$main_string = "основно"; $inbetween_string = "междинно"; $sql = "SELECT * FROM Recipies WHERE eating REGEXP '$a|$b' ORDER BY RAND()"; $result = mysqli_query($conn, $sql);
// Взимаме всички върнати рецепти $recipies = mysqli_fetch_assoc($result);
// Декларираме празен масив, където ще слагаме // рецептите за междинно хранене $inbetween_recipies = [];
// Декларираме празен масив, където ще слагаме // рецептите за основно хранене $main_recipies = [];
// Въртим цикъла докато не съберем 2 рецепти за междинно и 3 рецепти за основно while( ((count($inbetween_recipies) < 2) && (count($main_recipies) < 3)) ) {
// Взимаме случайна рецепта (ако искаш да е случайна естествено) $recipe = array_rand($recipies);
// Ако рецептата е за междинно хранене и не сме взели нужния брой // то добавяме към масива за рецепти за междинно хранене if ( $recipe['eating'] == $inbetween_string && count($inbetween_recipies) < 2 ) { $inbetween_recipies[] = $recipe; }
// Ако рецептата е за основно хранене и не сме взели нужния брой // то добавяме към масива за рецепти за основно хранене if ( $recipe['eating'] == $main_string && count($main_recipies) < 3 ) { $main_recipies[] = $recipe; } }
// Когато приключи цикъла е нужно да комбинираме двата масива $collected_recipies = array_merge($main_recipies, $inbetween_recipies);
// Принтираме линкове към рецептите foreach( $collected_recipies as $k => $recipe ) { printf('<a href="rec.php?id=%d"> %s - %s - %s</a><br />', $recipe['id'], $recipe['title'], $recipe['blocks'], $recipe['eating']); }
Не съм тествал кода, може и да има грешки. Малко промених логиката. Де факто въртя цикъла докато взема нужните рецепти, като взимам random рецепти. Не съм правил проверка дали вече рецептата е взета, така че може да стане така че има повтарящи, но ако това сработи, лесно ще ти добавя и проверката.
Последната промяна е направена от Revelation на 27/06/2018 8:34 pm; мнението е било променяно общо 1 път |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 08/12/2006 10:13 am
Support:
Bonus: 466
Мнения: 2182
|
27/06/2018 8:23 pm
|
|
|
Можеш да вземеш 3 основни и 2 междинни с 1 UNION заявка, но понеже можеш да имаш сортиране и лимит само веднъж в 1 заявка ще трябва да направиш UNION от две заявки - първата взима 3 случайни основни, втората взима 2 случайни междинни PHP code: $sql = "SELECT * FROМ (SELECT * FROM Recipies WHERE eating = 'основно' order by RAND() LIMIT 3) r1 UNION SELECT * FROM (SELECT * FROM Recipies WHERE eating = 'междинно' order by RAND() LIMIT 2) r2"; $result = mysqli_query($conn, $sql); if (!$result) { die("Select failed"); } while($row = mysqli_fetch_assoc($result)) { $id = $row['id']; $title = $row['title']; $blocks = $row['blocks']; $eating = $row['eating'];
echo ('<a href="rec.php?id=' . $id . '">' . $title . ' - ' . $blocks . ' - ' . $eating . '<br></a>'); } $conn->close(); ?>
Последната промяна е направена от raiden на 27/06/2018 8:28 pm; мнението е било променяно общо 1 път |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 779
|
27/06/2018 8:27 pm
|
|
|
raiden написа: | Можеш да вземеш 3 основни и 2 междинни с 1 UNION заявка, но понеже можеш да имаш сортиране и лимит само веднъж в 1 заявка ще трябва да направиш UNION от две заявки - първата взима 3 случайни основни, втората взима 2 случайни междинни
|
Само по този начин не се сетих да направя вложените селекти, да го ... 
П.П. Сигурен ли си, че заявката в това си състояние ще работи?
Последната промяна е направена от Revelation на 27/06/2018 8:31 pm; мнението е било променяно общо 1 път |
|
Върнете се в началото |
|
|
Нов
Регистриран на: 02/01/2016 11:49 pm
Support:
Bonus: 0
Мнения: 45
|
27/06/2018 8:30 pm
|
|
|
Сега ми излиза това Warning: Illegal string offset 'eating' in C:\xampp\htdocs\menu1.php on line 61 Warning: Illegal string offset 'eating' in C:\xampp\htdocs\menu1.php on line 67 Имаше и друга грешка, но нея я оправих - не съм съвсем боса  . |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 08/12/2006 10:13 am
Support:
Bonus: 466
Мнения: 2182
|
27/06/2018 8:31 pm
|
|
|
Revelation написа: | raiden написа: | Можеш да вземеш 3 основни и 2 междинни с 1 UNION заявка, но понеже можеш да имаш сортиране и лимит само веднъж в 1 заявка ще трябва да направиш UNION от две заявки - първата взима 3 случайни основни, втората взима 2 случайни междинни
|
Само по този начин не се сетих да направя вложените селекти, да го ...  |
Страшен loop иначе, само трябва да оправиш вътрешния иф за междинните да е < 1 иначе ако вземе 2 междинни преди 3 основни и попадне на междинно ще го добави  Edit: https://www.db-fiddle.com/f/ahkhotu2VKj254qbKnjq79/0 |
|
Върнете се в началото |
|
|
Нов
Регистриран на: 02/01/2016 11:49 pm
Support:
Bonus: 0
Мнения: 45
|
27/06/2018 8:35 pm
|
|
|
Можеше да напиша и редовете кои са PHP code: if ( $recipe['eating'] == $inbetween_string && count($inbetween_recipies) < 2 ) { и PHP code: if ( $recipe['eating'] == $main_string && count($main_recipies) < 2 ) { |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 779
|
27/06/2018 8:42 pm
|
|
|
|
|
Върнете се в началото |
|
|
Активен
Регистриран на: 08/12/2006 10:13 am
Support:
Bonus: 466
Мнения: 2182
|
27/06/2018 8:42 pm
|
|
|
Ако ползваш кода на колегата, имай предвид че array_rand връща ключ на масива, а не елемент. Ще трябва да замениш $recipe['eating'] със $recipes[$recipe]['eating']
|
|
Върнете се в началото |
|
|
Нов
Регистриран на: 02/01/2016 11:49 pm
Support:
Bonus: 0
Мнения: 45
|
27/06/2018 8:45 pm
|
|
|
Revelation написа: | raiden написа: | Можеш да вземеш 3 основни и 2 междинни с 1 UNION заявка, но понеже можеш да имаш сортиране и лимит само веднъж в 1 заявка ще трябва да направиш UNION от две заявки - първата взима 3 случайни основни, втората взима 2 случайни междинни
|
Само по този начин не се сетих да направя вложените селекти, да го ... 
П.П. Сигурен ли си, че заявката в това си състояние ще работи? |
Select filed!  |
|
Върнете се в началото |
|
|
|