Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: proszę o pomoc w zapytaniu mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
konfeusz
Witam serdecznie.

Mam dosyć nurtujący mnie problem nad którym siedzę już 3 dzień i jakoś nic sensownego nie przychodzi mi do głowy.
(niestety magikiem jeszcze nie jestem, więc zwracam się do Was o pomoc)

Sprawa wygląda tak: potrzebuję stworzyć przycisk do przechodzenia na kolejne podstrony (chronologicznie), problem w tym, ze kolejność stron wyświetlane są wg wzorca podanego w bazie danych, natomiast ich (stron) nr ID nie zawsze są wpisane po kolei. Następny problem to taki, że mam jedynie dostęp w kodzie php do nr ID strony, natomiast model wyświetlania dla stron jest jeden z dwóch (quiz lub page).

Zeby bylo bardziej zrozumiale przedstawię tabele.

A. tabela 'modules' posiada takie pola:
1. 'id' - id strony
2. course - numer kursu i tu zawsze będzie stała (8)
3. module - tu jest numer modułu modelu wyświetlania strony (quiz=13), (page=12) to jest potrzebne do budowania odpowiednich linków.

Stworzyłem zapytanie do bazy i wyjąłem co mi potrzeba, a wygląda to tak:

  1. $idd=$_GET['id']; //jedyne co mogę wyjąć z kodu, to nr id strony
  2. $idd2=++$idd;
  3. //połączenie z bazą
  4. mysql_connect('localhost', 'modin', 'pass');
  5. mysql_select_db('modin');
  6. $wynik = mysql_query("SELECT id,module FROM modules WHERE id= '$idd2'")
  7. or die('Błąd zapytania');
  8. mysql_query("SET NAMES 'UTF8'");
  9. $zawod=mysql_fetch_array($wynik);
  10. $modul=$zawod['1'];
  11. if($modul==13){
  12. echo "<a href=\"http://strona.pl/elearning/mod/quiz/view.php?id=".$idd2."\">następny quiz</a><br><br>";
  13. } elseif ($modul==12){
  14. echo "<a href=\"http://strona.pl/elearning/mod/page/view.php?id=".$idd2."\">następny quiz</a><br><br>";
  15. } else {
  16. echo "błąd";}


i tu jest wszystko fajnie, ale okazuje się, że nr id strony nie zawsze są po kolei np od 1 do 100, ale są pomieszane i czasami zaraz za 2 jest 30 lub podobnie.
Znalazłem drugą tabelkę, która odpowiada właśnie za kolejność wyświetlanych stron, a wygląda ona tak:

B. tabela 'sections' posiada takie pola:
1. 'id' - własne id
2. 'course' - numer kursu i tu ma wybierać tylko 8
3. 'section' - nr sekcji od 1-24
4. 'sequence' - i tu podane są po kolei numery id stron które mają być wyświetlane.

i teraz obrazowo, w sekcji nr 1 jest 5 stron wyswietlanych po kolei (183,184,185,186,187), natomiast juz w sekcji 4 kolejność jest taka (199,200,202,201)

Na mój rozum, należało by stworzyć zapytanie które wyjmowało by numery sekcji od 1-24, stworzyło tablicę gdzie wkładało by po kolei nr id stron z pola 'sequence' z poszczególnych 'section', tylko dla 'course==8', tak żeby tablica zawierała po kolei nr id stron, później sprawdzała obecny id stron i budowała link tak jak powyżej z uwzględnieniem nr modułu.

Wiem jak zadać takie pytanie co przedstawiłem powyżej, ale nie mam pojęcia jak napisać to w php. Jakoś nie mogę się skupić a mam naglący termin by to stworzyć.
Bardzo proszę o pomoc.

Pozdrawiam, Bartek.
nospor
To co chcesz zrobić nazywa się STRONICOWANIE. I pełno tego w sieci jak i u nas na forum. Wystarczy że chwilę poszukasz.
konfeusz
jak to się nazywa to wiem, zwyczajnie mam gorączkę i ciężko myślę, totalna pustka w głowie, a czas mnie nagli. Szukam rozwiązania, to oczywiste, bo nie lubię jak ktoś za mnie kod pisze, ale mam wyjątkową sytuację dlatego zdecydowałem się prosić o pomoc.
nospor
ORDER BY oraz LIMIT
A to wszystko masz w masie przykładach o których wspomniałem
konfeusz
ok, cos tam zacząłem tworzyć, ale stanąłem w martwym punkcie...


zadałem pytanie i ładnie baza mi odpowiada:

  1. $lista = mysql_query("SELECT sequence FROM mdl_course_sections WHERE course=8 AND section > 0 AND section < 25 ORDER BY section") or die('Błąd 2 zapytania');
  2.  
  3. while($pokaz = mysql_fetch_array($lista)){
  4. $tablica = ($pokaz['sequence'].',');
  5. echo $tablica; // tu mi wyświetla po kolei liczby jedna po drugiej w takiej kolejności jakiej powinny byc oddzielone przecinkami, bo same sequence to ciąg znaków oddzielone wewnątrz przecinkami z pustym polem na końcu
  6. }

czyli:
183,184,185,186,187,
....
208,228,207,206,

teraz
  1. echo "<br>...";
  2. $strona_id = explode(",", $tablica); // oddzielam poszczególne id
  3. echo $strona_id['0']; // i tu rozczarowanie.


zamiast pierwszej cyfry z $tablica, pokazuje mi pierwsza cyfre z ostatniego elementu czyli 208, zamiast 183

czyta mi tylko ostatni sequence bo $strona_id['4'] już jest pusty, w czym popełniam błąd?
nospor
$tablica = ($pokaz['sequence'].',');
Odróżniaj nadpisywanie od dopisywania.

Jak chcesz tworzyć tablicę to tak ma być:
$tablica[] = $pokaz['sequence'];

A przed pętlą masz ją zadeklarować czyli $tablica = array();
konfeusz

mam :/ boszzzz głupia kropka rozwiązała sprawe


przepraszam za głupie pytania
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.