Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] kłopot z SELECT GROUP_CONCAT
Forum PHP.pl > Forum > Przedszkole
kowal1029
Witam
Próbuję zaadoptować na swoje potrzeby projekt sklepu internetowego z książki, ale co chwile napotykam jakieś błędy. Z tym jednak nie umiem sobie poradzić, gdy chcę przeszukać bazę danych z poziomu sklepu na ekaranie napotykam taki błąd:

Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id

kod programu:


Kod
include "sklep_db_functions.php";

function search($autor, $tytul)
{
  if(!makeDBConnection()){
    return false;
  }

  if($autor == '' && $tytul == ''){
    return false;
  }
  else if($autor == ''){
    $where = "LOCATE('$tytul', `tytuł`) <> 0 ";
  }
  else if($tytul == ''){
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 ";
  }
  else{
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND ";
    $where .= "LOCATE('$tytul', `tytuł`) <> 0 ";
  }

  $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa ";
  $query .= "AS Wydawnictwo, Cena, Ksiazki.Id AS Id ";
  $query .= "FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy ";
  $query .= "WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND ";
  $query .= "KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND ";
  $query .= "KsiazkiAutorzy.AutorId = Autorzy.Id AND ";
  $query .= $where;
  $query .= "GROUP BY Ksiazki.Id";


z góry dziękuję za pomoc
ActivePlayer
a jaki błąd zapytania dostajesz?

spróbuj to zapytanie wykonać poprzez phpmyadmin.
kowal1029
błąd jest tak jak pisałem

Cytat
Odrzucone zapytanie: funkcja showItem: SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, Tytuł, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, Ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.WydawnictwoId = Wydawnictwa.Id AND KsiazkiAutorzy.`KsiążkaId` = Ksiazki.Id AND KsiazkiAutorzy.AutorId = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id
ActivePlayer
wklej to zapytanie do phpmyadmin i zobaczysz faktyczny błąd. Teraz nie masz informacji o tym jaki jest błąd, tylko o tym że on istnieje i że dane zapytanie nie wykonuje się poprawnie. Składniowo na pierwszy rzut oka wygląda okey, więc trzeba zobaczyć konkretniej na czym polega.
kowal1029
Wrzuciłem do phpmyadmin, pozmieniałem troche w zapytaniu bo nazwy kolumn w tabelach różniły się nieco od tych w zapytaniu, ostatecznie wygląda to tak
Cytat
SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.'Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('dsdsd', `autorzy`.`nazwa`) <> 0 AND LOCATE('sdfcsdfsd', `tytuł`) <> 0 GROUP BY Ksiazki.Id


teraz mam taki błąd
Cytat
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Ksiazka_Id' = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND LOCATE('d' at line 1


Zaczynam dopiero z php i myslq, czy generalnie może to być wina źle ponazywanych kolumn?
slash^
Nazwy kolumn bierz w apostrofy `kolumna` a nie cudzyslowia 'kolumna'.
kowal1029
Zmieniłem te apostrofy teraz kod wygląda tak:
Cytat
SELECT GROUP_CONCAT( Autorzy.Nazwa ) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id
FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy
WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id
AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id
AND KsiazkiAutorzy.Autor_Id = Autorzy.Id
AND LOCATE( 'Adam Mickiewicz', `autorzy`.`nazwa` ) <>0
AND LOCATE( 'Pan Tadeusz', `tytul` ) <>0
GROUP BY Ksiazki.Id
LIMIT 0 , 30


W phpmyadmin wszystko działa zaznacza wybraną książke, ale na stroni jest cały czas ten sam błąd, chyba że wrzuce kod razem z tym AND LOCATE... to wtedy wyświetla w tabeli wybraną pozycję
Michael2318
Dodaj do tej funkcji w PHP na końcu:

  1. return $query;


I wywołaj gdzieś tą funkcję w ten sposób:

  1. var_dump(search($autor, $tytul));


i pokaż jak to zapytanie wygląda w PHP finalnie.
kowal1029
O takie coś chodzi? Na końcu jest ten return i var_dump
Kod
function search($autor, $tytul)
{
  if(!makeDBConnection()){
    return false;
  }

  if($autor == '' && $tytul == ''){
    return false;
  }
  else if($autor == ''){
    $where = "LOCATE('$tytul', `tytuł`) <> 0 ";
  }
  else if($tytul == ''){
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 ";
  }
  else{
    $where = "LOCATE('$autor', `autorzy`.`nazwa`) <> 0 AND ";
    $where .= "LOCATE('$tytul', `tytuł`) <> 0 ";
  }

  $query = "SELECT GROUP_CONCAT(Autorzy.Nazwa) AS Autor, tytul, ISBN, Wydawnictwa.Nazwa AS Wydawnictwo, Cena, ksiazki.Id AS Id FROM Ksiazki, Wydawnictwa, Autorzy, KsiazkiAutorzy WHERE Ksiazki.Wydawnictwo_Id = Wydawnictwa.Id AND KsiazkiAutorzy.`Ksiazka_Id` = ksiazki.Id AND KsiazkiAutorzy.Autor_Id = Autorzy.Id AND GROUP BY Ksiazki.Id";


  if(!$result = mysql_query($query)){
    echo("Odrzucone zapytanie: funkcja showItem: $query");
    return false;
  }

  echo("<table border='1' align='center'>");
  echo("<tr><td align='center' colspan='6'>Wyniki wyszukiwania</td></tr>");
  echo("<tr>");
  echo("<td>Tytuł</td>");
  echo("<td>Autor</td>");
  echo("<td>ISBN</td>");
  echo("<td>Wydawnictwo</td>");
  echo("<td>Cena</td>");
  echo("<td>Dodaj</td>");
  echo("</tr>");

  while($arr = mysql_fetch_array($result)){
    echo("<tr>");
    echo("<td>");
    echo("<a href='main.php?action=showitem&id=$arr[Id]'>$arr[Tytuł]</a>");
    echo("</td>");
    echo("<td>$arr[Autor]</td>");
    echo("<td>$arr[ISBN]</td>");
    echo("<td>$arr[Wydawnictwo]</td>");
    echo("<td>$arr[Cena]</td>");
    echo("<td>");
    echo("<a href='main.php?action=atb&id=$arr[Id]'>Do koszyka</a>");
    echo("</td>");
    echo("</tr>");
  }
  echo("</table>");
  return $query;
  var_dump(search($autor, $tytul));
  }


Ale cały czas ten sam błąd
Pyton_000
przed tym
Kod
echo("Odrzucone zapytanie: funkcja showItem: $query");

daj
  1. echo mysql_error();die();
aniolekx
tak to jest z gównianymi książkami.

Po pierwsze nie widzę abyś dodawał zmienna $where do $query

zaraz za query zrób (chyba o to chudziło koledze powyżej):
Kod
die(var_dump($query));




Poza tym samo zapytanie jest cholernie nieczytelne, używasz wielkich znaków (w tym polskich) i kiepskiego łączenia tabel, już nawet zapomniałem ze tak można.

w tym ostatnim LOCATE masz polski znak (tytuł), a kiedy wybierasz ta sama kolumnę w selekcie już polskiego znaku nie masz.
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.