Skocz do zawartości

Zapytanie zlaczające mysql


gixx

Rekomendowane odpowiedzi

Mam tabelę z nazwami. Chcę aby obok kolumny powstała druga, i pokazywała ile dana nazwa występuje razy w tabeli.

SELECT *, count(name) FROM tabela GROUP BY name;

Działa prawie dobrze, bo jak jest duplikat to wyświetla go tylko raz.

Jak zadziałać, by działało..? :)

e: tzn. pokazuje się ilość wystąpień ale jak dana wartość występuje 2 i więcej razy, to pokazuje się tylko raz. Stąd nie ma opcji edytuj w phpmyadmin i nie mogę takich wierszy edytować..

multikonto

Odnośnik do komentarza
Udostępnij na innych stronach

e: tzn. pokazuje się ilość wystąpień ale jak dana wartość występuje 2 i więcej razy, to pokazuje się tylko raz. Stąd nie ma opcji edytuj w phpmyadmin i nie mogę takich wierszy edytować..
Ty w ogóle wiesz jak działa klauzula GROUP BY ? Napisz jeszcze raz co chcesz uzyskać.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Ok od początku, baza wygląda tak:

NAZWA; NAZWASEO

treść;

inna treść

treść

jeszcze inna treść

Chcę w kolumnie nazwaseo mieć takie wartości:

tresc

inna-tresc

tresc-2

jeszcze-inna-tresc

Czyli elementy które się nie powtarzają przepisać tylko po przemieleniu funkcją makeurl().

A takie elementy które występują 2 i więcej razy ponumerować, by w kolumnie NAZWASEO nie było duplikatów.

Więc, jako że nie za bardzo wiem jak zrobić to w mysqlu wrzuciłem taki kod:

$zapytanie = "SELECT * FROM tabela GROUP BY name HAVING count( * ) >1";
$idzapytania = mysql_query($zapytanie);

// tu wyświetla tylko te które które występują 2x lub więcej
while ($wiersz = mysql_fetch_array($idzapytania))
{
 $i = 0;
   $zapytanieq = "SELECT * FROM tabela WHERE name='$wiersz[name]'";
   $idzapytaniaq = mysql_query($zapytanieq);

   // tu szuka konkretnych rekordów gdzie nazwa występuje 2x lub więcej
   while ($wierszq = mysql_fetch_array($idzapytaniaq))
   {
    $i++;
       // tu tworzy url w formacie [nazwa-url]-[lp]
    $too = makeurl($wierszq[name]).'-'.$i;
    echo $too;

       // tu POWINNO zapisywać zmienną którą wcześniej wyświtliło
       $zap = "UPDATE `tabela` SET `nameseo`='".makeurl($wierszq[name]).'-'.$too."' WHERE             name='$wierszq[name]'";
       $iupp = mysql_query($zap);

       echo '<br>-------<br>';
 }
   echo '<br>-------------------------------<br>';
}

Niestety.. Skrypt ładnie wyświetla duplikaty ponumerowane, a zapisuje do bazy co innego.

Wyświetla takie coś:

tresc-1

tresc-2

inny-1

inny-2

inny-3

a zapisuje do bazy

tresc-2

tresc-2

inny-3

inny-3

inny-3

Nie mam głowy jak to ogarnąć.

A w poprzednim poście chodziło mi o to że wyświetla mi to:

NAZWA; count(name)

treść; 2

inna treść; 1

jeszcze inna treść; 1

zamiast tego:

NAZWA; count(name)

treść; 2

inna treść; 1

treść; 2

jeszcze inna treść; 1

bo nie miało chyba prawa wyświetlać inaczej.. starałem się to obejść w php ale się nie udało jak widać wyżej. Jak to rozwiązać żeby wreszcie poszło?

multikonto

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem o co ci chodzi, ale zainteresuj się:

SQL DISTINCT

SQL GRUPU BY

SQL COUNT (DISTINCT )

https://www.w3schools.com/sql/default.asp

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mam 2 kolumny, jedną z nazwami i jedna pustą. W tej pustej chcę mieć nazwę zamienioną na url. Przykładowa zamiana "Jakaś treść" -> "jakas-tresc".

Tylko, że rekordów mam ponad 10k i czasem sie nazwa powtarza. Więc do kolumny pustej nie chcę kopiować zamienionych nazw "żywcem" tylko je ponumerować na końcu. "jakas-tresc-2", "jakas-tresc-3" itd. Tak by w tej kolumnie powtórzeń już nie było.

Nie wiem tylko, czemu zamieszczony wyżej kod php wyświetla poprawnie nazwy, a jak przyjdzie do zapisu to zapisuje źle.

W powyższym kodzie php nawet jeżeli $i w zmiennej $too zamienię (dla testu) na rand(1,9) to i tak do mysql nie trafiają rróżne rekordy.

multikonto

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności